纠纷奇闻作文社交美文家庭
聚热点
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

开发必须要懂的协议oauth

3月7日 终不悔投稿
  本篇文章让我带你认识一下什么是oauth协议什么是oauth协议?
  百度百科上解释:允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。
  简单的来讲就是一个令牌,这个令牌可以有一定的权限,在不知道用户密码的情况下也可以进行部分的功功能操作。用一个例子帮助理解:一个甲方公司,公司里面使用一卡通,这张卡可以门禁,食堂,等等,公司招了外包进来,外包只能开通门禁就行,其他的权限是没有的。这时候公司就不会给一张正式员工的卡,而是外包的卡,正编员工卡就是用户的账号密码,这个外包卡就相当于是一个令牌,并且可能公司会给你的外包卡设置一个有效期,等有效期快到的时候有需要申请延期。这个就相当于是oauth协议模式。用户不会给你用户名和密码,那样相当于放开了所有的权限,而会给你提供一个令牌,在有效期类可以访问特定的功能服务使用令牌的优点:令牌是短期的,到期会自动失效,用户自己无法修改。密码一般长期有效,用户不修改,就不会发生变化。令牌可以被数据所有者撤销,会立即失效。令牌有权限范围(scope),对于网络服务来说,只读令牌就比读写令牌更安全。密码一般是完整权限oauth协议有四种模式;
  1、授权码模式2、隐藏式3、密码式4、客户端凭证其中授权码方式是最常用的流程,安全性也最高,今天我们就来着重讲一下授权码模式。授权码模式:指的是第三方应用先申请一个授权码,然后再用该码获取令牌,授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。授权码模式主要分为几个步骤
  以甲方公司员工卡系统(SelfResearch。com)和外包公司员工卡系统(outsource。com)为例,下面是授权码模式的流程
  请求授权码
  首先,甲方公司给外包员工方提供一个授权链接,外包员工点击连接,申请授权码,连接参数如下所示
  https:SelfResearch。comoauthauthorize?responsetypecodeclientidCLIENTIDredirecturiCALLBACKURLscoperead
  responsetype参数表示要求返回授权码(code),clientid参数让甲方知道是谁在请求,redirecturi参数是甲方系统接受或拒绝请求后的跳转网址,scope参数表示要求的授权范围(这里是只读)。
  返回授权码
  用户跳转到这个之后,甲方公司会先要求用户登录,然后请求授权,如果同意就跳转到redirecturi这个参数的地址,并返回授权码
  https:SelfResearch。comcallback?codeAUTHORIZATIONCODE
  code就是表示授权码
  请求令牌
  外包员工拿着授权码去请求令牌
  https:SelfResearch。comoauthtoken?clientidCLIENTIDclientsecretCLIENTSECRETgranttypeauthorizationcodecodeAUTHORIZATIONCODEredirecturiCALLBACKURLclientid参数和clientsecret参数用来让甲方公司确认外包员工的身份(clientsecret参数是保密的,因此只能在后端发请求)。granttype参数的值是AUTHORIZATIONCODE,表示采用的授权方式是授权码。code参数是上一步拿到的授权码。redirecturi参数是令牌颁发后的回调网址。
  返回令牌外包员工访问redirecturi会得到一串json数据:{accesstoken:67c4051b36c811ecaf3300163e0808bf,tokentype:bearer,refreshtoken:71975ccc36c811ecaf33cfd2826915e5,expiresin:3249,scope:read}
  accesstoken就是令牌了,用户需要访问其他接口就需要带上这个token去访问了refreshtoken这个是刷新令牌,如果需要使用新的token,就需要通过这个刷新令牌来获取最新的accesstoken。实现oauth2,可以分为三个步骤认证服务资源服务第三方服务
  现在第三方用户(test9527)想去访问资源中的部分功能(接口),但是改功能只有User角色才能访问,需要先通过认证服务器获取user的授权码,然后拿着这个code和自己账号信息去获取token,并校验通过之后才能访问到资源服务器,也就是第三方用户通过test9527可以访问本来需要user权限才能访问的资源功能(接口)
  实现步骤:
  创建三个服务oauthserver(认证服务)、resourceserver(资源服务)、thirdserver(第三方服务
  maven依赖!oauth2dependencygroupIdorg。springframework。security。oauthgroupIdspringsecurityoauth2artifactIdversion2。1。3。RELEASEversiondependency!springsecuritydependencygroupIdorg。springframework。bootgroupIdspringbootstartersecurityartifactIddependency
  oauthserver服务配置文件模拟第三方授权配置EnableAuthorizationServerConfigurationpublicclassAuthConfigextendsAuthorizationServerConfigurerAdapter{ResourceClientDetailsServiceclientDetailsS资源服务器校验TokenOverridepublicvoidconfigure(AuthorizationServerSecurityConfigurersecurity){security。checkTokenAccess(permitAll())。allowFormAuthenticationForClients();}第三方客户端请求配置,和资源服务访问的配置,不设置默认都可以访问,提供默认回调地址Overridepublicvoidconfigure(ClientDetailsServiceConfigurerclients)throwsException{clients。inMemory()第三方用户。withClient(test9527)。secret(newBCryptPasswordEncoder()。encode(test9527))。resourceIds(resource)认证模式。authorizedGrantTypes(authorizationcode,refreshtoken)。scopes(all)回调地址。redirectUris(http:localhost:8082notify。html);}配置访问端点Overridepublicvoidconfigure(AuthorizationServerEndpointsConfigurerendpoints){endpoints。authorizationCodeServices(authorizationCodeServices())。tokenServices(tokenServices());}内存管理BeanAuthorizationCodeServicesauthorizationCodeServices(){returnnewInMemoryAuthorizationCodeServices();}Token管理规则BeanAuthorizationServerTokenServicestokenServices(){DefaultTokenServicesservicesnewDefaultTokenServices();services。setClientDetailsService(clientDetailsService);services。setSupportRefreshToken(true);services。setTokenStore(tokenStore());services。setAccessTokenValiditySeconds(3600);services。setRefreshTokenValiditySeconds(36007);}BeanTokenStoretokenStore(){returnnewInMemoryTokenStore();}
  配置springsecurity模拟本地用户配置ConfigurationpublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{密码加密方式BeanpublicPasswordEncoderpasswordEncoder(){returnnewBCryptPasswordEncoder();}内存中虚拟用户和角色Overrideprotectedvoidconfigure(AuthenticationManagerBuilderauth)throwsException{auth。inMemoryAuthentication()。withUser(user)。password(newBCryptPasswordEncoder()。encode(123456))。roles(user);}表单登录Overrideprotectedvoidconfigure(HttpSecurityhttp)throwsException{http。csrf()。disable()。formLogin();}}
  resourceserver配置资源服务管理配置ConfigurationEnableResourceServerpublicclassResourceServerConfigextendsResourceServerConfigurerAdapter{Token令牌校验BeanRemoteTokenServicestokenServices(){RemoteTokenServicesservicesnewRemoteTokenServices();services。setCheckTokenEndpointUrl(http:localhost:8080oauthchecktoken);services。setClientId(test9527);services。setClientSecret(test9527);}服务资源ID配置Overridepublicvoidconfigure(ResourceServerSecurityConfigurerresources)throwsException{resources。resourceId(resource)。tokenServices(tokenServices());}模拟用户权限规则Overridepublicvoidconfigure(HttpSecurityhttp)throwsException{http。authorizeRequests()访问user下的路径需要user角色。antMatchers(user)。hasRole(user)。anyRequest()。authenticated();}
  resource下的功能(接口)
  第三方服务首先认证,获取授权码codehttp:localhost:8080oauthauthorize?clientidtest9527responsetypecodescopeallredirecturihttp:localhost:8082notify。html
  此时会到认证服务器中的user认证
  此时需要user用户同意授权,当认证服务中的user用户同意之后,到如下页面,此时看接口可以知道已经拿到code授权码,并跳转到我们需要跳转的地址
  redirecturihttp:localhost:8082notify。html
  拿到授权码之后访问回调地址http:localhost:8082notify。html?codeRs067L然后通过code,clientid,clientsecret等参数访问获取令牌地址https:SelfResearch。comoauthtoken?clientidCLIENTIDclientsecretCLIENTSECRETgranttypeauthorizationcodecodeSMD5njredirecturiredirecturihttp:localhost:8082notify。html成功之后会返回token,刷新token,以及token有效时间,如下
  拿到token之后,我们再去访问资源服务器,此时就能顺利访问到功能(接口)了
  最终效果,最终第三方用户test9527访问当了资源服务器功
  至此认证授权完毕,如有错误欢迎指出,共同学习进步
  代码地址getee:https:gitee。comcoolhy123oauth。git
  参考:https:segmentfault。coma1190000038574022
投诉 评论 转载

太意外!袁心玥无缘,李盈莹入选,2023年中国女排集训名单被众所周知,现在中国女排球迷们关注的焦点是天津女排和上海女排最终谁会夺得新赛季排超联赛的冠军,那么毋庸置疑,在确定之后中国女排就将进入集训的时刻,因此广大球迷们对于2023年中国……英特尔将投资1000亿美元建立芯片制造厂制造工厂应在2025年投入运营。英特尔宣布一项新的投资计划,将在美国俄亥俄州投资200亿美元建设两座半导体制造工厂。该计划最终的投资额或将高达1000亿美元,共建设8家制……夜读丨人在低谷时,做好这三件事文樱桃屈原在《离骚》中说:路漫漫其修远兮,吾将上下而求索。生活是公平的,每个人的前行路都是漫长坎坷的。而面对低谷时,有人会自暴自弃坐等转机,有人却会勇敢向前突破迷局……两个人的旅行清单谈一场奋不顾身的爱情,去一次说走就走的旅行王家卫的电影《春光乍泄》里有这么一句经典台词:我终于来到瀑布,我突然想起何宝荣,我觉得好难过,我始终认为站在这儿的应该是两个人。有人说,爱上一座城,是因为城里住着某……为什么iPhone看起来就很贵,质感就很好呢?为什么iPhone看起来就很贵,而一些安卓旗舰机就算价格都超过了iPhone,但看起来就是廉价。iPhone为什么质感这么优秀?或者说它到底贵在哪里呢?首先就是很容易被大……统计了下CBA常规赛的扣篮数排行,山东高速陶汉林果真没让人失各位周末愉快。本赛季的常规赛已经结束了。想看看扣篮这一项的情况。编了段代码统计了下。数据来源于中国篮球数据库。把数据复制下来,选出所有球队中有扣篮数据的球员以及他们……宫指导一针见血地指出了中国男篮存在弊端,没有荣誉市场是疲软的境界不同带出来的运动员也不同,宫鲁鸣和以前的教练,带出来的运动员,争先恐后地要求进入国家队,以国家队员为光荣。而现在呢,不是强调有伤,要不然就是诈伤。为了俱乐部的利益,为了钱而……越过越好的女人,大都有点心狠老话说女人不狠,地位不稳。一个女人若是太过于心软,显得怯懦,就容易被人牵着鼻子走,很难活出自我。生活是需要自己来经营的,你对待生活什么态度,生活就好回馈给你什么。想……我是如何把一颗伴随了我23年的大黑痣除掉的大家好呀!不知道你们有没有被痣困扰的时候。对于我自己而言,我23岁那年,把伴随我23年的一颗大黑痣给除掉了。下面讲讲祛痣的方法过程以及我的感受。那会儿我还在读大二,对自己……到底什么样的面料才算好的面料?现在正值夏季,已经有粉丝琢磨秋季穿什么衣服了,但是面料种类太多,也不知道什么面料比较好,所以就有点懵逼。小检在这里整理出常见的面料及特性,其实面料主要分为天然纤维、再生纤……开发必须要懂的协议oauth本篇文章让我带你认识一下什么是oauth协议什么是oauth协议?百度百科上解释:允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌……欧洲送来4450亿大单,任正非坚持对了,华为即将要走出低谷了点击关注,每天精彩不断!导读:欧洲送来4450亿大单,任正非坚持对了,华为即将要走出低谷了!众所周知,在任正非的带领下,华为公司最近这十几年发展的十分迅猛;作为华为公司的……
外媒台积电开始品尝苦果了给2022年最美的8位国产剧女明星排个名,袁泉最后,殷桃第78。5个名额,18强赛!我们距离世界杯近了还是远了大国科学家施汝为搞研究不是为发论文拿奖,而是为国防和工业比亚迪投诉多,质量不好?No!从比例看,比亚迪非常值得信赖VR开启沉浸式培训教育新模式五一假期打卡北洛秘境洛悦酒店,海边游放大招,网友值得一去马斯克SpaceX的星链出现轻微故障恒大队长让人动容遭遇欠薪仍自发组织17人集训,还与对手热身61岁宋丹丹再当奶奶,儿媳博古诞下二胎儿子,一家五口超温馨徐克与武侠剧神雕侠侣的不解之缘隋文静每天练到晚上11点,我胖全因聪哥,也曾面临重组
高额的漂亮国国债如何加快学习和掌握新技能达芬奇的两个秘密帮你成为专家型通才日本的旅游签证好办吗经典游戏《暗黑破坏神2》当年你刷出过哪些引以为豪的装备?热闻 哭金县丞夏天减肥好还是冬天好呢?墓地使用年限是多少年(上海墓地使用年限)热闻聚热点网 第三次网络直播教学记录魔兽世界现在能够在赛季服坚持下来的,肯定都是真爱Nature最新消息:熊去氧胆酸可关闭新冠感染受体,有效预防 有的女人,表面看上去安分守己,实则很花心熟鸡蛋放冷冻室能保存多久熟鸡蛋在冰箱放几天

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形