淘寶 OAuth2.0 的登入驗證與授權
最近老闆有意與淘寶合作,網站需要支援淘寶登陸驗證與授權,所以研究了下淘寶的第三方登陸,基於OAuth2.0(其實也沒啥好說的,原理都一樣,主要是一些細節)。寫blog的原因是當時研究這玩意是發現文件只有兩個版本,一個是官網提供的(http://open.taobao.com/doc2/detail.htm?articleId=118&docType=1&treeId=null),一個是寫了一半的技術文件(http://blog.chinaunix.net/uid-25528943-id-3127111.html),卻被無數人轉載,本人實在看不下去了,功能走通上線後,有時間就把這文件寫了,讓更多的人可以學習。
1)申請app ID 和 app secret (http://my.open.taobao.com/),然後註冊應用,這裡應該有讓你填個回撥地址,即redirect_uri(如果沒填,也還可以在控制檯-應用設定-基本資訊,勾選需要商家授權,這時填你的回撥地址:www.xxx.com)
2) 開發者通過 https://oauth.taobao.com/authorize 獲取使用者授權碼,即code。引數:
引數 | 引數值 | 說明 |
---|---|---|
* client_id | 即開發者的APPKEY | |
* response_type | code | 相應型別,填code,即授權碼 |
* redirect_uri | 回撥地址。此地址是開發者註冊應用時填寫的回撥地址(如果不一致,將返回錯誤)。 | |
scope | 訪問區域。 | |
state | 用於維持應用狀態,淘寶伺服器將回填這個值。 | |
view | 可選值:web(預設)、tmall、wap。 |
以下是一個請求授權碼的示例:
https://oauth.taobao.com/authorize?response_type=code&client_id=12539988&redirect_uri=http://www.xxx.com/taobao/auth&state=1
收到請求後,淘寶伺服器返回值:
引數說明
code授權碼 正常結果。
error錯誤碼 異常時返回
error_description錯誤描述 異常時返回。
如果淘寶伺服器返回的值有code,恭喜你,已經完成第二步,如果錯誤請在http://open.taobao.com/doc2/detail.htm?articleId=118&docType=1&treeId=null的最後錯誤排查中排查自己的錯誤。
3)拿到授權碼code後,就可以換取使用者基本資訊。
用post請求
https://oauth.taobao.com/token?grant_type=authorization_code&response_type=code&client_id=23294542&client_secret=27552d4ac86de9603cd4fe0d125e6062&redirect_uri=http%3A%2F%2Fwww.xxx.com%2F&code=X9XPfI9JVHiTgKME6JyAXDAD315945(填寫淘寶伺服器返回給你code)
這樣你就可以得到類似的資料:
{
"taobao_user_nick": "taobaonick",
"re_expires_in": 0,
"expires_in": 7776000,
"expire_time": 1459911894299,
"r1_expires_in": 1800,
"w2_valid": 1452135894299,
"w2_expires_in": 0,
"w1_expires_in": 1800,
"r1_valid": 1452137694299,
"r2_valid": 1452135894299,
"w1_valid": 1452137694299,
"r2_expires_in": 0,
"token_type": "Bearer",
"refresh_token": "620251524f72a26b6c8ecd1ZZe29bbbxxx",
"open_uid": "AAENArTTACOmNcx4Z-_D0qU2",
"refresh_token_valid_time": 1452135894299,
"access_token": "620141595ca09af54aa5918ZZeafd0c0fe770bb07xxx"
}
這樣整個認證過程就結束了,你接下來要做的是就是建立兩個url,一個是login,一個是auth,然後資料庫存從淘寶伺服器上得到的這些資訊(或者再你的user表中建立等等)
.......