什么是OAuth2
OAuth(Open Authorization,開放授權)是為用戶資源的授權定義了一個安全、開放及簡單的標准,第三方無需知道用戶的賬號及密碼,就可獲取到用戶的授權信息
OAuth2.0是OAuth協議的延續版本,但不向后兼容OAuth 1.0即完全廢止了OAuth1.0
應用場景
第三方應用授權登錄:在APP或者網頁接入一些第三方應用時,時常會需要用戶登錄另一個合作平台,比如QQ,微博,微信的授權登錄,第三方應用通過oauth2方式獲取用戶信息
運作流程
微信開發文檔流程說明如下:
1. 第三方發起微信授權登錄請求,微信用戶允許授權第三方應用后,微信會拉起應用或重定向到第三方網站,並且帶上授權臨時票據code參數;
2. 通過code參數加上AppID和AppSecret等,通過API換取access_token;
3. 通過access_token進行接口調用,獲取用戶基本數據資源或幫助用戶實現基本操作。
具體的實現流程圖如下:

OAuth2流程圖
步驟說明(以微信授權登錄為例)
1.用戶訪問第三方網站,第三方應用需要用戶登錄驗證,用戶選擇微信授權登錄
2.第三方應用發起微信登錄授權請求
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
參數 | 是否必須 | 說明 |
---|---|---|
appid | 是 | 公眾號的唯一標識 |
redirect_uri | 是 | 授權后重定向的回調鏈接地址 |
response_type | 是 | 返回類型,請填寫code |
scope | 是 | 應用授權作用域,snsapi_base 、snsapi_userinfo |
state | 否 | 重定向后會帶上state參數,該值會被微信原樣返回,我們可以將其進行比對防止攻擊或者做用戶步驟1訪問url保存 |
wechat_redirect | 否 | 直接在微信打開鏈接,可以不填此參數。做頁面302重定向時候,必須帶此參數 |
3.微信服務器拉起用戶授權確認頁面
4.用戶授權通過
5.微信發送請求到第三方應用redirctUrl(第2步填寫redirct_uri參數),返回憑證code與state(第2步自定義)
http://host/redirct_uri?code=0217a07e9c194dbf539c45c266b2dcfZ&state=state
6.第三方應用獲取到code之后,根據code獲取accessToken
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
參數 | 是否必須 | 說明 |
---|---|---|
appid | 是 | 應用唯一標識,在微信開放平台提交應用審核通過后獲得 |
secret | 是 | 應用密鑰AppSecret,在微信開放平台提交應用審核通過后獲得 |
code | 是 | 填寫第一步獲取的code參數 |
grant_type | 是 | 填authorization_code |
返回參數
參數 | 說明 |
---|---|
access_token | 接口調用憑證 |
expires_in | access_token接口調用憑證超時時間,單位(秒) |
refresh_token | 用戶刷新access_token |
openid | 授權用戶唯一標識 |
scope | 用戶授權的作用域,使用逗號(,)分隔 |
7.根據accessToken獲取用戶信息
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
返回參數
參數 | 說明 |
---|---|
openid | 普通用戶的標識,對當前開發者帳號唯一 |
nickname | 普通用戶昵稱 |
sex | 普通用戶性別,1為男性,2為女性 |
province | 普通用戶個人資料填寫的省份 |
city | 普通用戶個人資料填寫的城市 |
country | 國家,如中國為CN |
headimgurl | 用戶頭像,最后一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空 |
privilege | 用戶特權信息,json數組,如微信沃卡用戶為(chinaunicom) |
unionid | 用戶統一標識。針對一個微信開放平台帳號下的應用,同一用戶的unionid是唯一的。 |
8.對用戶信息進行處理(用戶是否第一次登錄,保存用戶信息,自定義token,session處理等)
9.返回結果(步驟1對應url或者重定向到首頁)
至此,微信OAuth2授權登錄過程結束
具體細節請參考微信開發平台-移動應用授權登錄