开发者社区> 技术mix呢> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

开放平台_OAuth2.0

简介:
+关注继续查看

为什么出现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和过期时间入库

返回access_tokenrefresh_token,过期时间

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

 

User-Agent:

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

1客户端http请求authorize

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

3用户在客户端登陆

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

 

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

 

Username and Password Flow

适合所有情况

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

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

 

特别说明:

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

 


本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2011/08/31/2161259.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
基于oauth 2.0 实现第三方开放平台
本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。 什么是开放平台 通过开放自己平台产品服务的各种API接口,让其他第三方开发者在开发应用时根据需求直接调用,例如微信登录、QQ登录、微信支付、微博登录、热门等。
1698 0
微信公众平台开发(71)OAuth2.0网页授权
微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室   微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章。
1375 0
五分钟带你玩转oauth2(十七)企业级解决方案,oauth2单点登录全流程
五分钟带你玩转oauth2(十七)企业级解决方案,oauth2单点登录全流程
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载