騰訊開放平臺的Oauth2.0協議開發

文章轉自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 

本步驟在整個流程中的位置
oauth2.0_guid_3.png


目錄

[隱藏]

上一步

放置“QQ登錄”按鈕_OAuth2.0


1. 簡介

即server-side模式,是OAuth2.0認證的一種模式,又稱Web Server Flow;
適用於需要從web server訪問的應用,例如Web/wap網站。


其授權驗證流程示意圖如下(圖片來源:OAuth2.0協議草案V21的4.1節 ) 
OAuth_guide_V2_1.png

對於應用而言,需要進行兩步:
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),如果要填寫多個接口名稱,請用逗號隔開。
例如:scope=get_user_info,list_album,upload_pic,do_like
不傳則默認請求對接口get_user_info進行授權。
建議控制授權項的數量,只傳入必要的接口名稱,因爲授權項越多,用戶越可能拒絕進行任何授權。

display 可選 PC網站接入時使用。

用於展示的樣式。不傳則默認展示爲PC下的樣式。
如果傳入“mobile”,則展示爲mobile端下的樣式。

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。
例如,回調地址爲www.qq.com/my.php,則跳轉到:
http://www.qq.com/my.php?code=520DD95263C1CFEA087****** 
注意此code會在10分鐘內過期。

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

獲取用戶OpenID_OAuth2.0

本步驟的作用
通過輸入在上一步獲取的Access Token,得到對應用戶身份的OpenID。
OpenID是此網站上或應用中唯一對應用戶身份的標識,網站或應用可將此ID進行存儲,便於用戶下次登錄時辨識其身份,或將其與用戶在網站上或應用中的原有賬號進行綁定。
本步驟在整個流程中的位置
oauth2.0_guid_4.png


目錄

[隱藏]

上一步

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時,發生錯誤

下一步

OpenAPI調用說明_OAuth2.0




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章