一、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授權流程圖如下: