文章轉自http://wiki.open.qq.com/wiki/website/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_OAuth2.0
使用Authorization_Code獲取Access_Token
本步驟的作用:
通過用戶驗證登錄和授權,獲取Access Token,爲下一步獲取用戶的OpenID做準備;
同時,Access Token是應用在調用OpenAPI訪問和修改用戶數據時必須傳入的參數。
移動端應用可以直接獲得AccessToken,請參考使用Implicit_Grant方式獲取Access_Token
本步驟在整個流程中的位置:
目錄[隱藏] |
上一步
1. 簡介
即server-side模式,是OAuth2.0認證的一種模式,又稱Web Server Flow;
適用於需要從web server訪問的應用,例如Web/wap網站。
其授權驗證流程示意圖如下(圖片來源:OAuth2.0協議草案V21的4.1節 )
對於應用而言,需要進行兩步:
1. 獲取Authorization Code;
2. 通過Authorization Code獲取Access Token
2. 過程詳解
Step1:獲取Authorization Code
請求地址:
PC網站: https://graph.qq.com/oauth2.0/authorize
WAP網站: https://graph.z.qq.com/moc2/authorize
請求方法:
GET
請求參數:
請求參數請包含如下內容:
參數 | 是否必須 | 含義 |
---|---|---|
response_type | 必須 | 授權類型,此值固定爲“code”。 |
client_id | 必須 | 申請QQ登錄成功後,分配給應用的appid。 |
redirect_uri | 必須 | 成功授權後的回調地址,必須是註冊appid時填寫的主域名下的地址,建議設置爲網站首頁或網站的用戶中心。注意需要將url進行URLEncode。 |
state | 必須 | client端的狀態值。用於第三方應用防止CSRF攻擊,成功授權後回調時會原樣帶回。請務必嚴格按照流程檢查用戶與state參數狀態的綁定。 |
scope | 可選 |
請求用戶授權時向用戶顯示的可進行授權的列表。
可填寫的值是API文檔中列出的接口,以及一些動作型的授權(目前僅有:do_like),如果要填寫多個接口名稱,請用逗號隔開。 |
display | 可選 |
僅PC網站接入時使用。
用於展示的樣式。不傳則默認展示爲PC下的樣式。 |
g_ut | 可選 |
僅WAP網站接入時使用。
QQ登錄頁面版本(1:wml版本; 2:xhtml版本),默認值爲1。 |
返回說明:
1. 如果用戶成功登錄並授權,則會跳轉到指定的回調地址,並在redirect_uri地址後帶上Authorization Code和原始的state值。如:
PC網站:http://graph.qq.com/demo/index.jsp?code=9A5F************************06AF&state=test
WAP網站:http://open.z.qq.com/demo/index.jsp?code=9A5F************************06AF&state=test
注意:此code會在10分鐘內過期。
2. 如果用戶在登錄授權過程中取消登錄流程,對於PC網站,登錄頁面直接關閉;對於WAP網站,同樣跳轉回指定的回調地址,並在redirect_uri地址後帶上usercancel參數和原始的state值,其中usercancel值爲非零,如:
http://open.z.qq.com/demo/index.jsp?usercancel=1&state=test
錯誤碼說明:
接口調用有錯誤時,會返回code和msg字段,以url參數對的形式返回,value部分會進行url編碼(UTF-8)。
PC網站接入時,錯誤碼詳細信息請參見:100000-100031:PC網站接入時的公共返回碼。
WAP網站接入時,錯誤碼詳細信息請參見:6000-6999:獲取Authorization Code時,發生錯誤。
Step2:通過Authorization Code獲取Access Token
請求地址:
PC網站:https://graph.qq.com/oauth2.0/token
WAP網站:https://graph.z.qq.com/moc2/token
請求方法:
GET
請求參數:
請求參數請包含如下內容:
參數 | 是否必須 | 含義 |
---|---|---|
grant_type | 必須 | 授權類型,此值固定爲“authorization_code”。 |
client_id | 必須 | 申請QQ登錄成功後,分配給網站的appid。 |
client_secret | 必須 | 申請QQ登錄成功後,分配給網站的appkey。 |
code | 必須 |
上一步返回的authorization code。
如果用戶成功登錄並授權,則會跳轉到指定的回調地址,並在URL中帶上Authorization Code。 |
redirect_uri | 必須 | 與上面一步中傳入的redirect_uri保持一致。 |
返回說明:
如果成功返回,即可在返回包中獲取到Access Token。
返回如下字符串:access_token=FE04************************CCE2&expires_in=7776000。
說明:
expires_in是該access token的有效期,單位爲秒。
錯誤碼說明:
接口調用有錯誤時,會返回code和msg字段,以url參數對的形式返回,value部分會進行url編碼(UTF-8)。
PC網站接入時,錯誤碼詳細信息請參見:100000-100031:PC網站接入時的公共返回碼。
WAP網站接入時,錯誤碼詳細信息請參見:7000-7999:通過Authorization Code獲取Access Token時,發生錯誤。
3. 快速上手
詳見:開發攻略_Server-side。
4. 其他資源
移動端應用可以直接獲得AccessToken,請參考使用Implicit_Grant方式獲取Access_Token 。
下一步
獲取用戶OpenID_OAuth2.0
本步驟的作用:
通過輸入在上一步獲取的Access Token,得到對應用戶身份的OpenID。
OpenID是此網站上或應用中唯一對應用戶身份的標識,網站或應用可將此ID進行存儲,便於用戶下次登錄時辨識其身份,或將其與用戶在網站上或應用中的原有賬號進行綁定。
本步驟在整個流程中的位置:
目錄[隱藏] |
上一步
server-side模式:請參見使用Authorization_Code獲取Access_Token
client-side模式:請參見使用Implicit_Grant方式獲取Access_Token
1 請求地址
PC網站:https://graph.qq.com/oauth2.0/me
WAP網站:https://graph.z.qq.com/moc2/me
2 請求方法
GET
3 請求參數
請求參數請包含如下內容:
參數 | 是否必須 | 含義 |
---|---|---|
access_token | 必須 | 在Step1中獲取到的access token。 |
4 返回說明
PC網站接入時,獲取到用戶OpenID,返回包如下:
callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
WAP網站接入時,返回如下字符串:
client_id=100222222&openid=1704************************878C
openid是此網站上唯一對應用戶身份的標識,網站可將此ID進行存儲便於用戶下次登錄時辨識其身份,或將其與用戶在網站上的原有賬號進行綁定。
5 錯誤碼說明
接口調用有錯誤時,會返回code和msg字段,以url參數對的形式返回,value部分會進行url編碼(UTF-8)。
PC網站接入時,錯誤碼詳細信息請參見:100000-100031:PC網站接入時的公共返回碼。
WAP網站接入時,錯誤碼詳細信息請參見:9000-9999:根據Access Token獲得對應用戶身份的openid時,發生錯誤。