oauth2.0

1Oauth2.0 三种类型的认证方式

1、 web网站认证

用户从第三方web site页面,302跳转至账号中心

输入参数:appkey、回跳地址、认证类型

https://account.aliyun.com/oauth/authorize?oauth_consumer_key=YOUR_APP_KEY&oauth_callback=YOUR_CALLBACK_URL&response_type=code

用户在账号中心登陆授权后,跳回第三方web站点

返回参数:授权临时code

https://www.aliyun.com/oauth_callback?code=CODE_GENERATE_BY_ACCOUNT


第三方web server调用账号中心api,换取accessToken

输入参数:授权临时codeappkey, appsec,回调地址,授权类型

返回参数:accessToken, refreshToken, expireTime

https://account.aliyun.com/oauth/access_token?code=CODE_GET_BEFORE&grant_type=authorization_code&oauth_consumer_key=YOUR_APP_KEY&oauth_consumer_secret=YOUR_APP_SEC&oauth_callback=YOUR_CALLBACK_URL


第三方web server使用accessToken调用账号中心api

输入参数:accessToken

返回参数:业务数据

https://account.aliyun.com/openapi/id/load?oauth_token=YOUR_ACCESS_TOKEN



2、 Javascript Client认证 (ImplicitGrant)

从第三方网站页面302跳转至账号中心授权页面

输入参数:appkey,回调地址,认证类型

https://account.aliyun.com/oauth/authorize?oauth_consumer_key=YOUR_APP_KEY&oauth_callback=YOUR_CALLBACK_URL&response_type=token


账号中心直接带上accessToken回跳第三方网站

输出参数:accessToken, expireTime

https://www.aliyun.com/oauth_callback#oauth_token=ACCESS_TOKEN&expires_in=EXPIRE_TIME


Javascript程序获取accessToken,调用账号中心API

var token = window.location.hash;

var script = document.createElement(‘script’);

script.src = ‘https://account.aliyun.com/openapi/id/load?oauth_token=’ + token;

document.body.appendChild(script);

返回jsonp格式response,例如:var data = {‘v1’:’xx’}


3、 用户名密码认证

第三方web server调用账号中心API,获取accessToken

输入参数:用户名、密码、appkeyappSec、认证类型

输出参数:accessTokenexpireTimerefreshToken

https://account.aliyun.com/oauth/[email protected]&password=XXXX&oauth_consumer_key=APP_KEY&oauth_consumer_secret=APP_SEC&grant_type=password


第三方web server使用accessToken调用账号中心API

输入参数:accessToken

返回参数:业务数据

https://account.aliyun.com/openapi/id/load?oauth_token=YOUR_ACCESS_TOKEN


2各家厂商的oauth2.0实现,有所不同

新浪微博

人人网

淘宝

腾讯微博

web网站认证

支持

支持

支持

支持

js client认证

支持

支持

支持

支持

用户名密码认证

支持

支持

不支持

不支持

refresh token

不支持

支持

支持

支持

oauth api通道

https

https

https

https

open api 通道

https

http

https

https

调用API需要签名

不用

需要

不用

不用

3oauth2.0的变化

2.0继续沿用oauth核心理念,就是用户只能在资源所在站点输入用户名密码,任何第三方站点是无权获取用户密码的。

最本质的变化是从oauth1.0走http协议到oauth2.0的https协议,从而导致了认证应用和用户授权的方式改变,体现在API调用中oauth协议参数上。

附加改变是增加支持了oauth1.0中没有涉及的客户端场景:纯页面js脚本、纯客户端。

具体要点:

1、2.0只支持https通道,参数更简洁。省去了oauth_timestamp,oauth_nonce参数。这两个参数在1.0协议中,主要用于防止重放攻击,而https下不存在这个问题。

2、调用API时省去了复杂的签名算法。在2.0中,因为走https通道,accessToken, appKey, appSec在调用API时,是可以直接作为参数传递给server端的。因此无需通过复杂的签名算法保证appSec和tokenSec的保密性。

3、AccessToken Refresh机制:因为在调用OpenAPI时,accessToken是作为参数传递调用的,为了安全起见,对其做了失效处理。失效后,拿refreshToken重新获取有效的accessToken。RefreshToken是用户认证后,server对server获取的值,不会在网络上传输,具有一定的保密性和可靠性。

4、固定callback:应用注册时,会告之固定的一个callbackURL,不可变。在oauth的任意步骤中,需要回跳第三方服务器时,一定是回跳到当初注册的那个地址去的。增加了安全性。

6各个厂商API认证方式

淘宝TOP

同时支持两种认证方式

http通道:TOP认证(将由oauth2.0取代)1

https通道:oauth2.0

新浪微博

同时支持oauth1.0和2.0。

但是在弱化1.0版本(网站上已经没有1.0版本文档的明显入口了),部分新接口只支持2.0版本oauth认证,且提供接口/oauth2/get_oauth2_token将oauth1.0的token换成2.0的token

但是weibo 的oauth2.0没有refresh token的概念,accessToken失效后,用户必须重新授权。过期时间根据应用级别,从7天到90天不等。

人人

基于oauth2.0上,自己的一套认证逻辑

通过oauth2.0协议方法,获取用户的accessToken授权

在调用API时,accessToken作为参数传递,并且需要用appSec对整串参数做MD5签名

走oauth2.0认证的接口,都是https通道

而API调用通道,都是http,所以仍然需要appSec签名

腾讯QQ

同时支持oauth1.0和2.0,还有自定义的OpenID&OpenKey鉴权

oauth协议1.0和2.0都支持的比较规范

附带的,通过在用户登录授权后,会额外返回OpenID&OpenKey参数,标识用户的ID和密钥,通过OpenKey做签名算法也可以访问API

注1:TOP认证是类似于oauth1.0的认证,需要302跳转到taobao.com进行用户登陆授权,获取sessionKey,接着用appSec+sessionKey进行API参数的md5|hmac算法签名调用API。并且TOP认证加入了oauth2.0中的refresh token概念,sessionKey是有生命期的,可以通过refreshToken去延长生命期

你可能感兴趣的:(OAuth2.0)