- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OAUTH2选编
OAUTH 2.0 介绍;解决方案 – 授权代理(oauth2)
概述
OAuth 为客户端提供了一种代表资源拥有者访问受保护资源的方法。
在客户端访问受保护资源之前,它必须先从资源拥有者获取授权(访问许可),然后用访问许可交换访问令牌(代表许可的作用域、持续时间和其它属性)。
客户端通过向资源服务器出示访问令牌来访问受保护资源。
基本概念
资源拥有者/用户(Resource Owner)
受保护的数据(如个人信息)或者服务的拥有人
一般是具体的用户
资源服务器(Resource Server)
提供资源的服务器,如保存了个人照片的服务器...
资源服务器通过服务接入提供对保护资源的访问
客户端/第三方应用(Client/3rd App)
拿资源拥有者的凭证去访问保护资源并再加工为资源拥有者提供更多的服务
授权服务器(Authorization Server)
用来认证授权并向第三方应用发放令牌的服务器
资源拥有者、第三方应用、资源服务器之间的授权代理
;认证授权流程
(A). 客户端从资源拥有者那里请求授权。
(B). 客户端收到一个访问许可,它代表由资源服务器提供的授权。
(C). 客户端使用它自己的私有证书到授权服务器上验证,并出示访问许可,来请求一个访问令牌。
(D). 授权服务器验证客户端私有证书和访问许可的有效性,如果验证通过则分发一个访问令牌。
(E). 客户端通过出示访问令牌向资源服务器请求受保护资源。
(F). 资源服务器验证访问令牌的有效性,如果验证通过则响应这个资源请求。
Tips:
- 资源服务器在收到服务请求时会与授权服务器交互验证该令牌有效性
如果令牌无效,会返回4xx异常
- 为提高执行效率,资源服务器一般会提供带时效的缓存来保存访问令牌,但是这样的负面作用是用户撤销授权后还会有一段时间服务依然会通过;具体实现
oauth2的四种实现方式
授权码授权(服务端WEB应用流程)
这是基于网页的授权方式。
客户端在请求验证前,需要先将浏览器跳转到用户授权页面,用户在登陆并确认授权后将浏览器Redirect到获得ClientID是注册的回调地址。这个地址中包含一个code参数。
用户根据该参数请求服务器获得Access Token。该认证授权流程包含了图片中的所有步骤。
??式授权(客户端WEB应用流程)
这是一种适合JS等网页语言使用的认证方式。
这种认证方式比较简单,首先将页面引导至用户授权页面,用户授权后直接跳转到回调地址,并将Access Token作为地址参数传递给页面,方便脚本语言(JS)的访问。
用户密码凭证(资源拥有者密码凭证流程)
这是一种比较大的信任授权方式。
前提条件是用户对你的应用有绝对的信任,愿意在你的应用(Client)中输入自己的用户名和密码。
客户端通过用户名和密码进行验证,并得到Access Token。
客户端凭证(应用凭证流程)
对于不需要用户登陆就可以访问的资源,可以通过这种方式进行授权
;授权码授权
适用场景
第三方应用是Web服务器
需要长时间访问资源
API 比较重要,避免访问令牌经过浏览器,减少泄漏可能
业务流程
用户在授权服务器认证和对应用授权
发放授权码(Authorization Code)
交换访问令牌(Access Token)
访问服务
刷新访问令牌;
;程序实现
步骤1:认证和授权
1、第三放应用发现没有授权时将用户转发到授权服务器的授权入口 redirect:http://localhost:60185/authorization?redirect_uri=/oauth2client_id=client1.idresponse_type=codedecision=1
授权地址: http://localhost:60185/authorization
请求方式:get
请求参数:
response_type: 授权类型,这个地方用授权码code
client_id: 第三方应用的注册ID,第三方应用本身也是需要注册的,服务器会为他发行一个ID和密钥
redirect_uri: 回调URL,等授权完成后会调用该接口
decision: 用户是否授权
2、用户在授权服务器登录
登录不是每次出现,如果当前浏览器已经登录过则无需登录;
3、用于对应用申请的访问授权
用户有机会参与到授权过程自己决定是否同意对应用授信
如果用户拒绝,不会回到第三方应用
;步骤2:发行授权码
授权通过后,授权服务器生成授权码并发送到回调接口返回URL提供参数code
回调接口解析并取得授权码;步骤3:交换访问令牌
第三方应用发送请求到访问令牌地址(http://localhost:60185/token)
请求地址:http://localhost:6018
文档评论(0)