oAuth 2.0协议解析

编号:OAPI-DESIGN-002

作者:刘海龙

微博:[http://weibo.com/liuhailong2008]

博客:[http://blog.csdn.net/stationxp]

协议概述

4个主体

完整的oAuth 2.0协议流包括4个主体,6个步骤。

4个主体分别是:

- 资源拥有者:可以是人,负责授权工作。对Open API来说,即发布方。发布方审批调用者的申请,通过后,即完成授权,体现为数据库中的记录。

- 客户端:一般是第三方应用程序。对于Open API来说,即调用者。

- 授权服务器:负责完成授权凭证的发放和验证工作。

- 资源服务器:负责提供资源或服务。

6个步骤

客户端要发起调用,面对对方3个角色,需要分别依次交流,每个角色一去一回,共6个步骤。

流程如下,首先是客户端和资源拥有者交流:

  1. 客户端向资源拥有者发起申请,请求许可。
  2. 资源拥有者批准申请,发送许可凭证grant_code给客户端。

客户端提交申请的时候提交了invoker uri,授权服务器可以发起如下请求,传回grant code。

http://invoker_uri?grant_code=xxxxxxxx

invoker uri在整个交互过程中要保持一致,对资源发起调用也必须来来自这个uri。

接下来就是客户端和授权服务器交互的过程了。

  1. 客户端向授权服务器发起申请,提交grant_code、client_id、invoker_uri。
  2. 授权服务器返回令牌token给客户端。

获得token之后,客户端暂时不需要直接和授权服务器打交道了。

客户端通过token,可以愉快地访问资源了,直到token过期、失效。

接下来,客户端和资源服务器交流,享受服务。

  1. 客户端向资源服务器端发起请求,携带token。
  2. 资源服务器验证token,提供服务。

支持sequence语法的MD阅读器可以看到时序图:

Created with Rapha?l 2.1.2客户端客户端资源拥有者资源拥有者授权服务器授权服务器资源服务器资源服务器1.我想要访问XX接口2.准了,这是“授权“3.我想要访问X的接口,这是“授权“4.OK,这是“令牌“,拿好5.1.我手续办齐了,我要访问你的XX1接口6.1.好吧5.2.我手续办齐了,我要访问你的XX2接口6.2.好吧

上面的过程中,客户端直接和资源拥有者交互,oAuth 2.0推荐授权服务器为中介,客户端和资源拥有者不直接沟通。

以上即oAuth 2.0的big picture。

授权服务器规划

oAuth 2.0定义了4种授权模式,以下仅以授权码模式为例。以下假定读者熟悉授权码模式的流程。

功能设计

协议的关键是授权服务器的实现。

在规划授权服务器功能时,不要考虑任何具体业务。

授权服务器完成以下几项工作:

- 发放Token

- 更新Token

- 验证token

对外接口

发放Token

Token的发放过程如下:

首先,客户端发起申请,如下:

http://auth_server/authorize?response_type=code&client_id=xxx&state=ddd&redirect_uri=httpxxxx

发送申请的地址需要和参数redirect_uri的值一致。

成功后,返回auth_code,发回状态码302。

location: httpxxxx?auth_code=ssss&state=ddd

传回的auth_code有效期通常是10分钟,只能使用一次。

接下来,客户端发起请求,申请正式token。

http://auth_server/authorize?grant_type=authorization_code&auth_code=ddd&&redirect_uri=httpxxxx

授权服务器返回:

access_token,token_type,expires_in,refresh_token,scope

重发Token

http://auth_server/authorize?grant_type=refresh_token&refresh_token=xxxxx

验证Token

http://auth_server/authenticate?access_token=ddd&invoker_uri=xxx&scope=ss

程序设计

interface AuthorizationServer{
    /** 发token,更新token */
    Response authorize(Request request);
    /** 验证token */
    Response authenticate(Request request);
}
interface GrantHandler{
    /** 授权 */
    Response grant(Request request);
    /** 验证 */
    Response authenticate(Request request);
}
interface AuthorizationCodeGrantHandler extends GrantHandler{
    /** 返回auth code */
    Response authCode(Request request);
}

为了实现上述功能,授权服务器还应该实现用户注册、授权申请、授权审批、资源定义、资源组管理(即scope)、授权码管理(grant code)、Token管理等功能。

时间: 2024-10-09 07:48:07

oAuth 2.0协议解析的相关文章

2015最新WebQQ3.0协议解析与实现

2015最新WebQQ3.0协议解析与实现(一) 2015最新webqq密码加密分析 2015最新WebQQ3.0协议解析与实现(三) 2015最新WebQQ3.0协议解析与实现(四) webqq协议综合篇,这个不是最新的,但是内容很全

OAuth 2.0协议在SAP产品中的应用

阮一峰老师曾经在他的博文理解OAuth 2.0里对这个概念有了深入浅出的阐述. http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 本文会结合我在SAP做过的项目,来给大家介绍这个协议是如何应用到SAP产品中去的. 我做过的最早的一个和OAuth 2.0相关的项目,是2013年时作为SAP成都研究院CRM开发团队的一员,参与设计和开发了SAP CRM和社交媒体集成解决方案.该方案实现了Twitter, Facebook和新浪微博等社交媒体和

Web验证方式--OAuth 2.0协议(1)

介绍 OAuth协议是用来解决第三方应用程序访问Http Service的时候的认证问题.举个例子:某视频网站支持用户通过微信登陆,然后获取用户在微信上的图像信息. 在这个场景里 微信充当的就是Http Service角色. 视频网站就是第三方应用 而视频网站从微信获取用户图像时,微信需要进行认证就是这里的认证问题 用户在微信上登陆后,产生的在视频网站中访问用户微信上的图像时所需的认证信息,就是OAuth解决认证问题的方式 名词定义 OAuth协议中定义了如下角色: Resource Owner

OAuth 2.0协议

OAuth2.0中文译本:http://wenku.baidu.com/link?url=1iKGF-v7t8I7LNu996h2FVTantrC-wFO-C-ILKFaaYTyqhL-b1h-ykRnTKGKexRFLYt2KKljT_mlZ0UfLFMSq-iiLqbByfW6NQri6FjrFQ3

Oauth2.0协议 http://www.php20.com/forum.php?mod=viewthread&tid=28 (出处: 码农之家)

概要     OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0. OAuth 2.0关注客户端开发者的简易性.要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限.同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程.2012年10月,OAuth 2.0协议正式发布为RFC 6749 OAuth 1.0已经在IETF尘埃落定,编号是RFC5849这也标志着OAuth已经正

深入理解OAuth2.0协议

1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店后,只需要将泊车钥匙交给服务生,停车的事情就由服务生去处理.与主钥匙相比,这种泊车钥匙的使用功能是受限制的:它只能启动发动机并让车行驶一段有限的距离,可以锁车,但无法打开后备箱,无法使用车内其他设备.这里就体现了一种简单的"开放授权"思想:通过一把泊车钥匙,车主便能将汽车的部分使用功能(如

OAuth 2.0 教程

OAuth 2.0 (原文:http://tutorials.jenkov.com/oauth2/index.html) OAuth 2.0 教程 OAuth 2.0 是一个开放的标准协议,允许应用程序访问其它应用的用户授权的数据.例如:一个游戏可以获取Facebook中的用户信息,或者是一个地理位置程序可以获取Foursquare的用户信息等. 这儿是一个示例图: 首先用户进入游戏的web应用,该应用要求用户通过Facebook账户登录,并定向到Facebook的登录界面,用户登录Facebo

(转)帮你深入理解OAuth2.0协议

1. 引言 如果你开车去酒店赴宴,你经常会苦于找不到停车位而耽误很多时间.是否有好办法可以避免这个问题呢?有的,听说有一些豪车的车主就不担心这个问题.豪车一般配备两种钥匙:主钥匙和泊车钥匙.当你到酒店后,只需要将泊车钥匙交给服务生,停车的事情就由服务生去处理.与主钥匙相比,这种泊车钥匙的使用功能是受限制的:它只能启动发动机并让车行驶一段有限的距离,可以锁车,但无法打开后备箱,无法使用车内其他设备.这里就体现了一种简单的"开放授权"思想:通过一把泊车钥匙,车主便能将汽车的部分使用功能(如

OAuth 2.0介绍学习

OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0. OAuth 2.0关注客户端开发者的简易性.要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限.同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程. OAuth 2.0早已经开始讨论和建立的草案.OAuth2.0很可能是下一代的"用户验证和授权"标准.现在百度开放平台,腾讯开放平台等大部分的开放平台都是使用