授權機制


微博開放介面的調用,如發微博、關注等,都是需要取得用戶認證的。目前微博開放平台使用者身分鑑權主要採用的是OAuth2.0。另外,為了方便開發者開發、測試自己的應用,我們也提供了Basic Auth的身份鑑權方式,但Basic Auth僅適用於應用程式所屬的開發者自己呼叫介面。


快速索引

  • #授權有效期限
  • 授權有效期的延續


OAuth2.0概述

#OAuth2.0較1.0相比,整個授權驗證流程更簡單更安全,也是未來最主要的使用者身份驗證和授權方式。


關於OAuth2.0協定的授權流程可以參考下面的流程圖,其中Client指第三方應用,Resource Owner指用戶,Authorization Server是我們的授權伺服器,Resource Server是API伺服器。



#開發者可以先瀏覽OAuth2.0的介面文檔,熟悉OAuth2.0的介面及參數的意義,然後我們根據應用場景各自說明如何使用OAuth2.0。


介面文件

##說明#OAuth2/authorize請求使用者授權Token#OAuth2/access_token取得授權過的Access TokenOAuth2/get_token_info#授權資訊查詢介面OAuth2/revokeoauth2授權回收介面OAuth2/get_oauth2_tokenOAuth1.0的Access Token更換至OAuth2.0的Access Token#


注意事項

    • #1、OAuth2.0授權無須申請,任何應用程式都可以使用。如果開發者需要更長的授權有效期限參考本文檔授權有效期限部分。
    • 2、如果你是站外網頁應用程式或用戶端應用,出於安全性考慮,需要在平台網站填寫redirect_url(授權回呼頁),才能使用OAuth2.0,填寫地址: 「我的應用程式>應用程式資訊>進階資訊」,對於客戶端,我們也提供了預設的回調頁位址。詳細請查看授權頁功能部分。


授權介面

OAuth2_intro.png


新版授權頁改變了先前頁面資訊元素過多,對使用者使用帶來幹擾的問題,登入並授權這兩個行為已在新版中分離,使用者能夠更好地理解帳號登入和授權的過程,也為未來更多的功能帶來承載空間。


目前一個最完整的授權分為三個步驟:登入-普通授權-進階授權(SCOPE)。但這三個步驟並不是必然出​​現,當使用者的微博處於登入狀態時,頁面會自動跳到普通授權頁,「進階授權」同樣也不是必須,如果開發者不申請SCOPE權限,系統會自動跳過此步驟,回呼應用。我們在灰階測試中統計發現,只要合理的使用高級授權,開發者完全不必擔心增加操作所帶來的頁面流失率問題,相反,一個清晰的授權體驗更能獲取用戶的信任。


同時,授權項將會變的更加有條理,之前的普通權限將作為基礎服務,用戶不再有感知,與用戶隱私相關的會歸到高級授權,用戶在授權時有權利逐條取消,進一步增強了隱私控制。


oauth2v3.png


#應用場景

開發者需要根據各自的應用程式場景,選擇適用的OAuth2.0授權流程:


    • # #1、PC端和Web網站,請參考:Web網站的驗證授權(Authorization Code)
    • #2、行動裝置應用程式可直接使用官方行動SDK,透過呼起微博客戶端(未安裝微博客戶端的會呼起H5授權頁)方式授權
    • 3、H5輕應用,請參考輕應用開髮指南


Web網站的授權


oAuth2_02.gif


#1. 引導需要授權的使用者到以下位址:

URL

https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI

2. 如果使用者同意授權,頁面跳到YOUR_REGISTERED_REDIRECT_URI/?code=CODE

3. 換取Access Token

#URL
https://api.weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SE.
#其中client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET可以使用basic方式加入header中,回傳值

JSON

{
    "access_token": "SlAV32hkKG",
    "remind_in": 3600,
    "expires_in": 3600
}
4. 使用獲得的Access Token呼叫API

行動應用程式的授權

sdk72207.png

行動應用程式(主要指Mobile Native App),建議使用官方提供的支援SSO授權的SDK, 可以大幅簡化授權流程開發,降低開發成本。

需要說明的是,移動應用請使用open.weibo.cn上的授權接口,普通的發博,評論等資源API依舊調用weibo.com接口。



SDK接取流程
    iOS SDK下載
  • ##Android SDK下載

授權有效期限

#微博開放平台的OAuth2.0授權機制下,第三方取得到的access_token是有過期時間的,通常過期時間為30天。

授權等級與OAuth2.0 access_token有效期限對應表:



#授權等級

介面
測試普通授權有效期限1天30天


註:

  • 1、只有未過審核的應用才處於測試層級。
  • 2、應用程式所屬開發者授權應用程式時,有效期限為5年。


你可以在 「我的應用程式>介面管理>授權機制」 上查詢目前應用的授權等級。也可以在這裡申請提高授權有效期限。


開發者可以透過兩種方式計算access_token的實效時間:

  • 1、使用者授權時,oauth2/access_token介面傳回的expires_in值就是access_token的生命週期;
  • 2、從上述對應表中,找到應用程式所對應的授權有效期,過期時間=  使用者授權時間授權有效期限;


第三方開發應用程式需要具備一定的健全性,呼叫介面時判斷介面的回傳值,如果使用者的access_token失效,需要引導使用者重新授權。


失效原因有以下幾個:

  • 1、使用者取消了對應用程式的授權;
  • 2、access_token自然過期;
  • 3、使用者修改了密碼,凍結了對應用程式的授權;
  • 4、微博發現使用者帳號被盜,凍結了使用者對應用程式的授權;


授權有效期限的延續

授權有效期限內重新授權

如果使用者在授權有效期限內重新開啟授權頁授權(如果此時使用者有微博登入狀態,這個頁面將一閃而過),那麼微博會為開發者自動延長access_token的生命週期,請開發者維護新授權後得access_token值。


透過Refresh Token刷新授權有效期限

除此之外,我們也提供了透過Refresh Token 刷新的方式來延續授權有效期,但需要注意的是:只有使用微博官方行動SDK的行動應用,才可以從SDK的方法中取得到Refresh Token。


Refresh Token 是 Access Grants 的一種,在取得 Access Token 時,認證伺服器會傳回對應的 Refresh Token,如果 Access Token 過期,就可以用 Refresh Token 去刷新。


Refresh Token 也是有有效期限的,Refresh Token 的有效期限目前為30天,在有效期限內隨時可以刷新。


透過 Refresh Token 刷新得到的新的 Access Token ,其有效期等同於原來的有效期,即原來 Access Token 的有效期是30天,則新獲得的也是30天。


簡單來說就是對於使用了微博移動SDK的行動應用,授權(Access Token)30天有效,30天內可續,從刷新時間點算起重新得到30天有效期。


oAuth2_05.gif


#1、當你是使用微博官方行動SDK的行動應用程式時,授權回傳access_token的同時,還會多回傳一個refresh_token:

JSON
{
    "access_token": "SlAV32hkKG",
    "remind_in": 3600,
    "expires_in": 3600
    "refresh_token": "QXBK19xm62"
}
2、当你调

#用API介面傳回Access Token過期時,你可以呼叫oauth2/access_token 並傳入refresh_token:


URL
https://api .weibo.com/oauth2/access_token?client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=refresh_token&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&fresh_token&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&fresh_token&redirect_uri=YOUR_REGISTERED_REDIRECT_URI&frm_
## 她
##JSON



{
    "access_token": "SlAV32hkKG",
    "expires_in": 3600
}



3、使用新獲得的Access Token呼叫API

使用OAuth2.0呼叫API


使用OAuth2.0呼叫API介面有兩種方式:

##1、直接使用參數,傳遞參數名稱為access_token

URL

https://api.weibo.com/2/statuses/public_timeline.json?access_token=abcd

#2、在header裡傳遞,形式為在header裡添加Authorization:OAuth2空格abcd,這裡的abcd假定為Access Token的值,其它接口參數正常傳遞即可。


註:所有的微博開放平台介面都部署在weibo.com域下,僅有行動端的授權介面在open.weibo.cn域。


授權中的其他功能

Scope

Scope是OAuth2.0新版授權頁提供的功能,透過scope,平台將開放更多的微博核心功能給開發者,同時也加強用戶隱私保護,提升了用戶體驗,用戶在新OAuth2.0授權頁中有權利選擇賦予應用的功能。


Scope開放的介面文件:介面文件


#用戶端預設回呼頁

#通常Mobile Native App沒有伺服器回呼位址,您可以在應用程式控制台授權回呼頁處填入平台提供的預設回呼頁,該頁面使用者不可見,僅用於取得access token。


OAuth2.0客戶端預設回呼頁:https://api.weibo.com/oauth2/default.html


#強制登入

授權頁會預設讀取目前使用者的微博登入狀態,如果你想讓使用者重新登錄,請在呼叫authorize介面時傳入參數: forcelogin=true,預設不填入此參數相當於forcelogin=false。


取消授權回呼頁

#開發者可以在應用程式控制台填入取消授權回呼頁,當使用者取消你的應用程式授權時,開放平台會回呼你填寫的這個位址。並傳遞給你以下參數,source:應用appkey,uid :取消授權的用戶,auth_end :取消授權的時間


OAuth2.0相關資源

#以下SDK包含了OAuth2.0及新版API介面




##下載Android SDK 下載iOS SDK下載WP7 SDK
#下載PHP SDK(由SAE維護)下載Java SDK


下載Flash SDK下載C# SDK

##下載Python SDK


下載Javascript SDK
################################ #############行動開發SDK說明文件################################ ###################Android SDK 說明文件######iOS SDK 說明文件######WP7 SDK 說明文件######## #####


其他參考資料

OAuth是一種國際通用的授權方式, OAuth2.0的官方技術說明可參考http:// oauth.net/2/


如果你仍在使用Oauth1.0,請進入瀏覽相關文件。


OAuth2.0 錯誤碼

#微博OAuth2.0實作中,授權伺服器在接收到驗證授權請求時,會依照OAuth2.0協定對本請求的請求頭部、請求參數進行檢驗,若請求不合法或驗證未通過,授權伺服器會傳回對應的錯誤訊息,包含下列幾個參數:

  • error: 錯誤碼
  • error_code: 錯誤的內部編號
  • error_description: 錯誤的描述訊息
  • error_url: 可讀的網頁URI,帶有關於錯誤的訊息,用於為終端用戶提供與錯誤相關的額外資訊。


錯誤訊息的回傳方式有兩種:

1. 當請求授權Endpoint:https://api.weibo.com/2/oauth2/authorize  時出現錯誤,返回方式是:跳到redirect_uri,並在uri 的query parameter中附帶錯誤的描述資訊。

2. 當請求access token endpoing:https://api.weibo.com/oauth2/access_token  時發生錯誤,並返回方式:回傳JSON文字。例如:


JSON
{
    "error": "unsupported_response_type",
    "error_code": 21329,
    "error_description": "不支援的ResponseType."
}

##OAuth2.錯誤#回應中的錯誤碼定義如下表所示:


QQ截图20170210143858.png

############################################## ######