騰訊微博OAuth2.0認證介紹

jopen 11年前發布 | 114K 次閱讀 OAuth2.0 微博工具/系統

騰訊微博OAuth2.0認證介紹

騰訊微博開放平臺,是基于騰訊微博系統,為廣大開發者和用戶提供的開放數據分享與傳播平臺。

廣大開發者和用戶登錄平臺后,就可以使用平臺提供的開放API接口,創建應用從微博系統獲取信息,或將新的信息傳播到整個微博系統中,豐富多樣的API接口和應用,加上您的智慧,將創造出無窮的應用和樂趣。

在使用騰訊微博平臺提供的API前,您需要做以下兩步工作:

  1. 成為開發者,并申請appkey和appsecret
  2. 授權獲取accesstoken

Accesstoken是第三方獲得用戶授權的憑證,是第三方訪問api資源的票據。目前,騰訊微博采用Oauth2.0協議對第三方進行授權,相對Oauth1.0來說,Oauth2.0具有更加簡單和安全特點。

關于Oauth2.0的詳細介紹,請參考Oauth2.0協議標準
如果您需要使用Oauth1.0授權,請參考騰訊微博Oauth1.0授權協議

獲取accesstoken的兩種方式

用戶通過Oauth2.0授權第三方有兩種方式:

  1. Authorization code grant,適合于有server端的應用授權
  2. Implicit grant,適合于通過客戶端訪問的應用授權

Authorization cod模式和Implicit模式僅在授權的時候有所區別,后續調用API的方式是一致的。

1.Authorization code grant

使用場景:
Authorization code授權適用于PC,無線客戶端等需要和第三方server進行交互的應用場景。使用Authorization code授權,第三方能夠集中處理用戶的授權請求和授權結果,適用于有server端的應用。

授權流程:
Authorization code授權模式分為兩步,首先獲取code,然后用code換取accesstoken。官方流程示意圖:

騰訊微博OAuth2.0認證介紹
交互圖: 騰訊微博OAuth2.0認證介紹

第一步:請求code

請求方法:
GET

請求地址:

https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=APP_KEY&
response_type=code&redirect_uri=http://www.myurl.com/example

請求參數:

字段 必須 說明
client_id true 申請應用時分配的app_key
redirect_uri true 授權回調地址,必須和應用注冊的地址一致
response_type true 授權類型,為code
wap false 主要用于指定手機授權頁的版本,無此參數默認顯示pc授權頁面

wap=1時,跳轉到wap1.0的授權頁
wap=2時,跳轉到wap2.0的授權頁
不帶本參數時,手機訪問默認跳到wap2.0的授權頁

state false 用于保持請求和回調的狀態,授權請求成功后原樣帶回給第三方。該參數用于防止csrf攻擊(跨站請求偽造攻擊),強烈建議第三方帶上該參數。參數設置建議為簡單隨機數+session的方式
forcelogin false 針對pc授權頁
forcelogin=true,強制彈出登錄授權頁面 forcelogin=false,用戶已經登錄并且已經授權第三方應用,則不再彈出授權頁面
默認為forcelogin=true

返回結果:
如果授權成功,授權服務器會將用戶的瀏覽器重定向到redirect_uri,并帶上code,openid和openkey等參數,重定向的url如下:

http://www.myurl.com/example?code=CODE&openid=OPENID&openkey=OPENKEY

參數說明:

字段 說明
code 用來換取accesstoken的授權碼,有效期為10分鐘
openid 用戶統一標識,可以唯一標識一個用戶
openkey 與openid對應的用戶key,是驗證openid身份的驗證密鑰

第二步:請求accesstoken

請求地址:

https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id=APP_KEY&
client_secret=APP_SECRET&redirect_uri=http://www.myurl.com/example&grant_type=authorization_code&code=CODE

請求參數:

字段 必須 說明
client_id true 申請應用時分配的app_key
client_secret true 申請應用時分配的app_secret
grant_type true authorization_code
code true 調用authorize時返回的code
redirect_uri true 授權回調地址,必須和應用注冊的地址一致
state false 用于保持請求和回調的狀態,授權請求成功后原樣帶回給第三方。該參數用于防止csrf攻擊(跨站請求偽造攻擊),強烈建議第三方帶上該參數。參數設置建議為簡單隨機數+session的方式

返回結果:

access_token=ACCESS_TOKEN&expires_in=60&refresh_token=REFRESH_TOKEN

參數說明:

字段 說明
access_token 訪問第三方資源的憑證
expires_in accesstoken過期時間,以返回的時間的準,單位為秒,注意過期時提醒用戶重新授權
refresh_token 刷新token

2.Implicit grant

使用場景:
Implicit grant授權適用于沒有server端的客戶端應用,由客戶端發起授權請求,保存和處理accesstoken。

授權流程:
官方流程示意圖:

騰訊微博OAuth2.0認證介紹

交互圖:

騰訊微博OAuth2.0認證介紹

請求地址:

https://open.t.qq.com/cgi-bin/oauth2/authorize?client_id=APP_KEY&
response_type=token&redirect_uri=http://www.myurl.com/example

請求參數:

字段 必須 說明
client_id true 申請應用時分配的app_key
redirect_uri true 授權回調地址,必須和應用注冊的地址一致
response_type true 授權類型,為token
wap false 主要用于指定手機授權頁的版本,無此參數默認顯示pc授權頁面

wap=1時,跳轉到wap1.0的授權頁
wap=2時,跳轉到wap2.0的授權頁
不帶本參數時,手機訪問默認跳到wap2.0的授權頁

state false 用于保持請求和回調的狀態,授權請求成功后原樣帶回給第三方。該參數用于防止csrf攻擊(跨站請求偽造攻擊),強烈建議第三方帶上該參數。參數設置建議為簡單隨機數+session的方式
forcelogin false 針對pc授權頁
forcelogin=true,強制彈出登錄授權頁面 forcelogin=false,用戶已經登錄并且已經授權第三方應用,則不再彈出授權頁面
默認為forcelogin=true

返回結果:

http://www.myurl.com/example#access_token=ACCESS_TOKEN&expires_in=60&openid=OPENID&openkey=OPENKEY

參數說明:

字段 說明
access_token accesstoken,訪問api資源的憑證
expires_in accesstoken過期時間,以系統返回的過期時間為準,注意過期時提醒用戶重新授權
openid 用戶統一標識,可以唯一標識一個用戶
openkey 與openid對應的用戶key,是驗證openid身份的驗證密鑰

刷新accesstoken

Oauth2中,access_token的有效期不是無限的,當第三方應用使用的access_token時間超過了其生命周期時,可以通過刷新機制來獲取新的access_token。

請求地址

https://open.t.qq.com/cgi-bin/oauth2/access_token?client_id=APP_KEY&
grant_type=refresh_token&refresh_token=REFRESH_TOKEN

請求參數

字段 必須 說明
client_id true 申請應用時分配的app_key
grant_type true 固定為“refresh_token”
refresh_token true 上次授權或者刷新時獲取的refresh_token

返回結果

返回字符串:

access_token=ACCESS_TOKEN&expires_in=60&refresh_token=REFRESH_TOKEN&name=NAME

參數說明

字段 說明
access_token access_token,訪問api資源的憑證
expires_in access_token過期時間,以系統返回的過期時間為準,注意過期時提醒用戶重新授權
refresh_token 刷新token
name 授權用戶微博帳號

注:
通過刷新機制可以延長access_token有效期,每次刷新延長的access_token有效期與授權時access_token的有效期一致,多次刷新可將access_token的有效期延長至一年。

訪問API資源

請求方法

GET/POST

請求參數(公共部分)

https://open.t.qq.com/api/REQUEST_METHOD?oauth_consumer_key=APP_KEY&
access_token=ACCESSTOKEN&openid=OPENID&clientip=CLIENTIP&oauth_version=2.a&scope=all

其中REQUEST_METHOD為需要請求的api接口,可以參考api資源列表
請求的參數中,Oauth部分需包含:

字段 說明
oauth_consumer_key appkey
access_token 授權獲得的accesstoken
openid 授權獲取的openid
clientip 客戶端的ip
oauth_version 版本號,必須為2.a
scope 請求權限范圍(默認“all”)

其他部分參數參考各api參數要求。

使用案例

  1. Authorization code授權案例
  2. Implicit授權案例

accesstoken過期時間

應用級別: accesstoken有效期
初級、高級及騰訊合作方應用,accesstoken有效期均為三個月

錯誤碼說明

請參考錯誤碼說明

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!