1. 程式人生 > >淘寶 OAuth2.0 的登入驗證與授權

淘寶 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表中建立等等)

.......