ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:18.66KB ,
资源ID:29524395      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29524395.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(oauth2开放认证协议原理及案例分析.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

oauth2开放认证协议原理及案例分析.docx

1、oauth2开放认证协议原理及案例分析oauth2开放认证协议原理及案例分析Posted on 2011-08-03 by kejibo 之前翻译过一篇 OAuth认证协议原理分析及使用方法,虽然 OAuth2还没有正式发布,但是国内外的OAuth2的采用情况几乎要完全替代掉了。像淘宝、腾讯、人人网、XX开放平台就已经采用Oauth2,新浪微博也发来邮件说是要很快上马OAuth2,彻底替换掉。目前OAuth2到了v20草稿阶段,最新的版本是 2011年7月25号发布的,协议变化还是很快的,所以看到国内的一些已经实现的实例,再比照官方的 oauth2,会有些出入的。 为何要 OAuth2来替换

2、一、OAuth2大大简化了认证流程,OAuth1版本,我都感觉有些流程设计不是为安全性而存在,有些东西很难想一个理由,他们为何要弄得如此复杂。复杂可能是增加安全性的一个要素,但是也极大增加了开发者的开发难度。 二、增加了对多种不同方式的认证,原来的认证只能直接或间接通过浏览器,现在有专门的标准来给客户端程序、移动应用、浏览器应用提供认证的方法。 OAuth2的四种角色 resource owner资源所有者:比如twitter用户,他在twitter的数据就是资源,他自己就是这些资源的所有者。 resource server资源服务器:保存资源的服务器,别人要访问受限制的资源就要出示 Acce

3、ss Token(访问另牌)。 client客户端:一个经过授权后,可以代表资源所有者访问资源服务器上受限制资源的一方。比如 开发者开发的应用。 authorization server授权服务器:对 资源所有者进行认证,认证通过后,向 客户端发放 Access Token(访问另牌)。 OAuth2取得Access Token的四种方式 一、Authorization Code授权码方式:这种是推荐使用的,也是最安全的,也是替换的一种授权方式。 流程: 1、引导用户访问授权服务器,比如地址: 123GET /authorizeresponse_type=code&client_id=s6Bh

4、dRkqt3&state=xyz &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/ Host: ,其中response_type 值固定为 code,client_id就是客户端申请开发者的时候取得的 appkey,state是一个可选参数,可以用于保存客户端在引导用户转向前的一些状态,当回到 redirect_uri的时候会原封不动的传回来,redirect_uri是当用户确认授权应用访问的时候跳转回来的地址。2,用户同意授权后跳转回来的的地址如:123HTTP/ 302 Found Location: &state=

5、xyz&state=xyz ,其中 code就是 Authorization Code,state就是上面所说的可选参数。3,使用取得的 Authorization Code去换取Access Token:1234567POST /token HTTP/ Host: Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded;charset=UTF-8 =authorization_code&code=SplxlOBeZQQYbYS6WxSbIA &redir

6、ect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb其中 Authorization是由Client id(app key)及Client password(app secret)组合成的 http basic 验证字符串,grant_type必须为 authorization_code,code是上一步取得的 Authorization Code,redirect_uri是完成后跳转回来的网址。如果Client不能发送 Authorization信息,则可以使用下面的方式,/token这个地址必须是 https连接的,不然就有泄露 client

7、secret的可能性:123456POST /token HTTP/ Host: Content-Type: application/x-www-form-urlencoded;charset=UTF-8 grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA &client_id=s6BhdRkqt3&client_secret=7Fjfp0ZBr1KtDRbnfVdmIw成功的话返回的信息为:123456789101112HTTP/ 200 OK Content-Type: application/json;charset

8、=UTF-8 Cache-Control: no-store Pragma: no-cache access_token:2YotnFZFEjr1zCsicMWpAA, token_type:example, expires_in:3600, refresh_token:tGzv3JOkF0XG5Qx2TlKWIA, example_parameter:example_value 二、Implicit Grant隐式授权:相比授权码授权,隐式授权少了第一步的取Authorization Code的过程,而且不会返回 refresh_token。主要用于无服务器端的应用,比如 浏览器插件。隐式授

9、权不包含Client授权,它的授权依赖于 资源所有者及注册应用时候所填写的redirection URI(跳转地址)。因为Access token是附着在 redirect_uri 上面被返回的,所以这个 Access token就可能会暴露给 资源所有者或者设置内的其它方(对资源所有者来说,可以看到redirect_uri,对其它方来说,可以通过监测浏览器的地址变化来得到 Access token)。 流程 一、引导用户访问一个专门的授权页面,如 123GET /authorizeresponse_type=token&client_id=s6BhdRkqt3&state=xyz &redi

10、rect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb HTTP/ Host: 这里的 response_type为 token,client_id为appkey。可以看到这里取Access token的过程中并没有像 第一种方式那样传入 client_secret。因为如果你传入 client_secret,其实就是相当于告诉用户,你应用的app secret了。二、在成功授权后,跳转回到 redirect_uri所定义的网址123HTTP/ 302 Found Location: rd#access_token=2YotnFZFEjr1zCsi

11、cMWpAA &state=xyz&token_type=example&expires_in=3600,这样应用就可以通过取地址中的 fragment部分来取得 access token。 三、Resource Owner Password Credentials资源所有者密码证书授权:这种验证主要用于资源所有者对Client有极高的信任度的情况,比如操作系统或高权限程序。只有在不能使用其它授权方式的情况下才使用这种方式。 流程: 一、提交信息到取 token页面 123456POST /token HTTP/ Host: Authorization: Basic czZCaGRSa3F0M

12、zpnWDFmQmF0M2JW Content-Type: application/x-www-form-urlencoded;charset=UTF-8 grant_type=password&username=johndoe&password=A3ddj3w这里的 Authorization是 client_id为username,client_secret为password的http basic验证码。grant_type必须为 password,username为用户名,password为用户密码。取得的结果如下:123456789101112HTTP/ 200 OK Content-

13、Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache access_token:2YotnFZFEjr1zCsicMWpAA, token_type:example, expires_in:3600, refresh_token:tGzv3JOkF0XG5Qx2TlKWIA, example_parameter:example_valueQ:为何要这种这么不安全的方式?A:取代原来原始的 username,password的授权方式,而且不需要 client保存用户的密码,client只要保存

14、access token就可以。主要用于客户端程序。 四、Client Credentials客户端证书授权:这种情况下 Client使用自己的 client证书(如 client_id及client_secret组成的 http basic验证码)来获取 access token,只能用于信任的client。 流程: 一、提交参数取 access token 123456POST /token HTTP/ Host: Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW Content-Type: application/x-www-form-u

15、rlencoded;charset=UTF-8 grant_type=client_credentials其中 Authorization是client_id及client_secret组成的 http basic验证串。grant_type必须为client_credentials,返回如下:1234567891011HTTP/ 200 OK Content-Type: application/json;charset=UTF-8 Cache-Control: no-store Pragma: no-cache access_token:2YotnFZFEjr1zCsicMWpAA, tok

16、en_type:example, expires_in:3600, example_parameter:example_value国内一些oauth2案例分析标准的 oauth2中,使用 access token来向资源服务器发出请求,取得资源。这里的资源服务器需要使用 https协议,否则access token极可能被其它方获取。比如123GET /resource/1 HTTP/ Host: Authorization: Bearer 7Fjfp0ZBr1KtDRbnfVdmIwbearer是指 token类型,后面的字符串就是access token。还有一种 mac类型的 token

17、(目前v20版本的草稿里还没有文档),如:12345GET /resource/1 HTTP/ Host: Authorization: MAC id=h480djs93hd8, nonce=274312:dj83hs9s, mac=kDZvddkndxvhGRXZhvuDjEWhGeE=,因为 https速度相较http慢,而且并非所有服务器或客户都支持https,所以国内一些网站采用一种http也可访问资源的方式。 淘宝开放平台的方式:应用通过用户授权获取的AccessToken的值即等同于Sessionkey,应用凭借AccessToken调用taobao API即可。查看淘宝SDK,可

18、以看到 其使用应用的app_secret作用密码钥来进行签名,参数里面包含了 这个Sessionkey,这样淘宝在收到这个请求的时候,根据 app_id来判断是哪个应用,根本sessionkey的值来判断是哪个用户,如果不传这个 sessionkey就用 app_id查得app_id所属的淘宝用户就行了。也就是说 sessionkey必须配合 这个 client自己的授权资料appkey appsrecet来访问资源。 XX开放平台方式、人人网方式、还有腾讯也类似:在返回 access token的同时返回 sessionKey及sessionSecret。如:12345678 access_

19、token: , expires_in: 86400, refresh_token: , scope: basic email, session_key: 9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A=, session_secret: 27e1be4fdcaa83d7f61c489994ff6ed6, 在调用资源API的时候,如下:12GET /rest/passport/users/getInfosession_key=9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBw

20、vU07RXP0J3c4GnhZR3GKhMHa1A%3D×tamp=2011-06-21+17%3A18%3A09&format=json&uid=&sign=d24dd357a95a2579c410b3a92495f009 HTTP/ Host: 这里参数里面的 session_key,传给服务器后,用户查询 session_secret,sign使用session_secret作为密钥来加密的。可以看到这里调用的时候没有使用 client_id或client_secret信息,所以对于任何获取12session_key: 9XNNXe66zOlSassjSKD5gry9BiN61IUEi8IpJmjBwvU07RXP0J3c4GnhZR3GKhMHa1A=, session_secret: 27e1be4fdcaa83d7f61c489994ff6ed6,的一方都可以调用到API。降低系统耦合度。This entry was posted in 未分类 and tagged oauth2 by kejibo. Bookmark the permalink.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1