OAuth協議簡介

一、OAuth協議簡介

OAuth授權在各社交網站中廣泛使用,該協議使用戶不需要直接向第三方應用提供用戶名及密碼,並且使一個賬戶在多個網站中使用成爲可能,OAuth協議的細節描述可參考其官方網站:http://oauth.net

目前OAuth 1.0已經出了final version,即RFC ,OAuth 2.0也已在起草中。

這篇文章中,我想用比較通俗的語言來解釋OAuth協議。

OAuth協議中包含了三個角色:
Service Provdier,即服務提供者,如新浪微博;
User,即普通用戶,如新浪微博用戶;
Consumer,即第三方應用,如本人開發的應用。

現有如下場景:User想利用Consumer來更新自己在Service Provider中的狀態,但此時Service Provider並不信任Consumer,且User也不想把帳號和密碼告訴Consumer,於是三者之間需要建立起信任關係。

Consumer首先要向Service Provider申請一對Consumer_Key和Consumer_Secret,以此取得Service Provider的信任。因爲User是信任Service Provider的,所以User與Consumer間的信任關係需要藉助Service Provider來建立。

Consumer用自己的Consumer_Key和Consumer_Secret向Service Provider請求到一對Request_Token和Request_Token_Secret,而後Consumer拿上這對RequestToken,領着User去見Service Provider。Service Provider見到自己發的RequestToken,便確認Consumer是值得信任的,於是把頭轉向User。如果Service Provider不記得User了,只要User向Service Provider提供用戶名和密碼,就能建立起信任關係。然後Service Provider對User說:「我很信任這個Consumer,你是不是也要信任他?」,若User確認,則Service Provider允許Consumer把User帶回去,併發給Consumer一個Verifier.

回來以後,Consumer拿着RequestToken和Verifier又單獨去找Service Provider,取回來一對Access_Token和Access_Token_Secret,並長期保存。

至此,三方信任關係就建立起來了,Consumer每次在Service Provider中更新User的狀態時,只需要提供這對AccessToken,Service Provider便能確定此Consumer能代替User進行相應的操作。

在使用相關OAuth庫進行開發時,所需要的關鍵字在以上場景中都有體現,包括:
Consumer_Key,   Consumer_Secret,   Request_Token,   Request_Token_Secret,   Verifier,   Access_Token,   Access_Token_Secret

OAuth授權流程圖如下: