1 Oauth2.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
輸入參數:授權臨時code、appkey, 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
輸入參數:用戶名、密碼、appkey、appSec、認證類型
輸出參數:accessToken、expireTime、refreshToken
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需要簽名 |
不用 |
需要 |
不用 |
不用 |
3 oauth2.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去延長生命期