代码改变世界

开放平台_OAuth2.0

2011-08-31 19:44  轩脉刃  阅读(20753)  评论(1编辑  收藏  举报

为什么出现oauth2.0

 

1 oauth1.0对手机客户端,移动设备等非server第三方的支持不好。其实oauth1.0也是可以支持手机客户端,移动设备等,也有相应的流程。但是oauth1.0是将多种流程合并成了一种,而事实证明,这种合并的流程体验性非常差

2 oauth1.0的三步认证过程比较繁琐和复杂,对第三方开发者增加了极大的开发难度

3 oauth1.0的加密需求过于复杂,第三方开发者使用oauth之前需要花费精力先实现oauth1.0的加密算法

4 oauth1.0的拓展性不够好

5 oauth1.0生成的access_token要求是永久有效的,这导致的问题是网站的安全性和破坏网站的架构

 

因此出现了oauth2.0

 

oauth2.0针对1.0的各种问题提供了解决方法:

1 oauth2.0提出了多种流程,各个客户端按照实际情况选择不同的流程来获取access_token。这样就解决了对移动设备等第三方的支持,也解决了拓展性的问题

2 oauth2.0删除了繁琐的加密算法。利用了https传输对认证的安全性进行了保证

3 oauth2.0的认证流程一般只有2步,对开发者来说,减轻了负担

4 oauth2.0提出了access_token的更新方案,获取access_token的同时也获取refresh_token, access_token是有过期时间的,refresh_token的过期时间较长,这样能随时使用refresh_tokenaccess_token进行更新

oauth2.0的现状

 

oauth2.0截止到2011/8/31 为止已经发布更新了20个版本,下面是oauth2.0ietf标准文档:

http://tools.ietf.org/html/draft-ietf-oauth-v2-20

 

oauth2.0得到了越来越多大公司的支持,比如microsoftyahoo等,也在实际使用过程中不断得到优化和完善,oauth2.0已经成为了业界通用和使用的标准。

 

oauth2.0的实现

 

oauth2.0有许多种流程,分别适应不同的第三方应用,并且这些流程数目还在不断增加和完善中,一个网站可以实现一种或多种流程

 

比如最典型的6中流程有 :

 

User-Agent Flow 客户端运行于用户代理内(典型如web浏览器)。

Web Server Flow 客户端是web服务器程序的一部分,通过http request接入,这是OAuth 1.0提供的流程的简化版本。

Device Flow 适用于客户端在受限设备上执行操作,但是终端用户单独接入另一台电脑或者设备的浏览器

Username and Password Flow 这个流程的应用场景是,用户信任客户端处理身份凭据,但是仍然不希望客户端储存他们的用户名和密码,这个流程仅在用户高度信任客户端时才适用。

Client Credentials Flow 客户端适用它的身份凭据去获取access token,这个流程支持2-legged OAuth的场景。

Assertion Flow 客户端用assertion去换取access token,比如SAML assertion

 

 

以开心网为例(开心网是实现了oauth2.0的第10个版本)

 

开心网实现了

Web Server Flow

User-Agent Flow

Username and Password Flow

三种方式

 

http://wiki.open.kaixin001.com/index.php?id=OAuth2.0%E6%96%87%E6%A1%A3

 

oauth2.0的客户端实现是非常方便的,开心网的说明文档也已经非常全了,这里就不多说了

 

下面说一下各个流程的步骤:

 

Web Server Flow

web ServerFlow是把oauth1.0的三个步骤缩略为两个步骤

 

首先这个是适合有server的第三方使用的。

1客户端http请求authorize

2服务端接收到authorize请求,返回用户登陆框页面

3用户在客户端登陆

4服务器端将浏览器定位到callbackurl,并同时传递Authorization Code

5客户端使用https发送access_token

6服务器端收到access_token请求,验证Authorization Code---生成access_token, refresh_token,和过期时间--access_tokenrefresh_token和过期时间入库

7 返回access_tokenrefresh_token,过期时间

8 用户使用HTTPS+ access_token请求开放平台接口

 

User-Agent:

适合所有无server端配合的客户端

1客户端http请求authorize

2服务端接收到authorize请求,返回用户登陆框页面

3用户在客户端登陆

4服务器端将浏览器定位到callbackurl,并同时传递access_token和过期时间

 

这里面的access_token可以考虑放在缓存中而不是放在数据库中,一旦过期时间到就可以作废了

 

Username and Password Flow

适合所有情况

1 客户端https请求access_token(使用https是由于参数中带着开心网的用户名和密码信息)2 服务器端收到access_token请求---生成access_token, refresh_token,和过期时间--access_tokenrefresh_token和过期时间入库

3 json返回access_token, refresh_token,和过期时间

 

特别说明:

oauth2.0客户端得到access_token之后是使用https来调用请求的,这样做的目的主要是放重放和数据泄露 

 

参考文档:

http://djb4ke.iteye.com/blog/683153

http://oauth.net/2/

http://hueniverse.com/2010/05/introducing-oauth-2-0/

http://wiki.open.kaixin001.com/index.php?id=OAuth2.0%E6%96%87%E6%A1%A3 

 

作者:轩脉刃(yjf512) 
出处:(http://www.cnblogs.com/yjf512/) 
版权声明:本文的版权归作者与博客园共有。欢迎转载阅读,转载时须注明本文的详细链接。