OAuth認證協議原理分析及使用方法

2021-06-21 23:52:39 字數 2823 閱讀 5560

oauth第二代 

oauth2開放認證協議原理及案例分析

寫於 2011-8-4

twitter或豆瓣使用者一定會發現,有時候,在別的**,點登入後轉到 twitter登入,之後轉回原**,你會發現你已經登入此**了,比如像 feedtwitter 

rss2twitter oauth是乙個開放的認證協議,讓你可以在web或桌面程式中使用簡單而標準的,安全的api認證。

網路開放是乙個不變的趨勢,那麼不可避免的會有各種網路服務間分享內容的需要。

舉個我們身邊國內的例子吧:比如人人網想要呼叫qq郵箱的聯絡人列表,現在的方法是你需要在人人網輸入你的qq號,qq密碼才能呼叫,雖然**上可能都自謂「不保留qq使用者名稱密碼」,但是大家信嗎?

oauth就是為了解決這個問題而誕生的,使用者訪問第三方資源,不再需要**提交你的使用者名稱,密碼。這樣好處自己是安全,而且不會洩露你的隱私給不信任的一方。

oauth中有三方:一,使用者;二,consumer(中間商,類似上面的 twitterfeed 角色);三,服務提供商(如上例的twitter角色)。

一,consumer 向 服務提供商 申請接入許可權

可得到:consumer key,consumer secret。twitter申請oauth的話,在 setting – connection – developer 裡面申請。 同時給出三個訪問**:

request_token_url = ''

access_token_url = ''

authorize_url = ''

二,當consumer接到使用者請求想要訪問第三方資源(如twitter)的時候

consumer需要先取得 請求另牌(request token)。**為上面的 request_token_url,引數為:

oauth_consumer_key:consumer key

oauth_signature_method:簽名加密方法

oauth_signature:加密的簽名 (這個下面細說)

oauth_timestamp:unix時間戳

oauth_nonce:乙個隨機的混淆字串,隨機生成乙個。

oauth_version:oauth版本,可選,如果設定的話,一定設定為 1.0

oauth_callback:返回**鏈結。

及其它服務提供商定義的引數

這樣 consumer就取得了 請求另牌(包括另牌名 oauth_token,另牌金鑰 oauth_token_secret。

三,瀏覽器自動轉向服務提供商的**:

**為 authorize_url?oauth_token=請求另牌名

四,使用者同意 consumer訪問 服務提供商資源

那麼會自動轉回上面的 oauth_callback 裡定義的**。同時加上 oauth_token (就是請求另牌),及 oauth_verifier(驗證碼)。

五,現在總可以開始請求資源了吧?

no。現在還需要再向 服務提供商 請求 訪問另牌(access token)。**為上面的 access_token_url,引數為:

oauth_consumer_key:consumer key

oauth_token:上面取得的 請求另牌的名

oauth_signature_method:簽名加密方法

oauth_signature:加密的簽名 (這個下面細說)

oauth_timestamp:unix時間戳

oauth_nonce:乙個隨機的混淆字串,隨機生成乙個。

oauth_version:oauth版本,可選,如果設定的話,一定設定為 1.0

oauth_verifier:上面返回的驗證碼。

請求 訪問另牌的時候,不能加其它引數。

這樣就可以取得 訪問另牌(包括access token 及 access token secret)。這個就是需要儲存在 consumer上面的資訊(沒有你的真實使用者名稱,密碼,安全吧!)

六,取得 訪問另牌 後,

consumer就可以作為使用者的身份訪問 服務提供商上被保護的資源了。提交的引數如下:

oauth_consumer_key:consumer key

oauth_token:訪問另牌

oauth_signature_method:簽名加密方法

oauth_signature:加密的簽名 (這個下面細說)

oauth_timestamp:unix時間戳

oauth_nonce:乙個隨機的混淆字串,隨機生成乙個。

oauth_version:oauth版本,可選,如果設定的話,一定設定為 1.0

及其它服務提供商定義的引數

oauth 使用的簽名加密方法有 hmac-sha1,rsa-sha1 (可以自定義)。拿 hmac-sha1 來說吧,hmac-sha1這種加密碼方法,可以使用 私鑰 來加密 要在網路上傳輸的資料,而這個私鑰只有 consumer及服務提供商知道,試圖攻擊的人即使得到傳輸在網路上的字串,沒有 私鑰 也是白搭。

私鑰是:consumer secret&token secret  (哈兩個密碼加一起)

要加密的字串是:除 oauth_signature 外的其它要傳輸的資料。按引數名字元排列,如果一樣,則按 內容排。如:domain=kejibo.com&oauth_consumer_key=xyz&word=welcome………………….

前面提的加密裡面都是固定的字串,那麼攻擊者豈不是直接可以偷取使用嗎?

不,oauth_timestamp,oauth_nonce。這兩個是變化的。而且伺服器會驗證乙個 nonce(混淆碼)是否已經被使用。

那麼這樣攻擊者就無法自已生成 簽名,或者偷你的簽名來使用了。

本文系原創,轉換請註明鏈結,謝謝!

OAuth認證協議原理分析及使用方法

本文 http kejibo.com oauth twitter或豆瓣使用者一定會發現,有時候,在別的 點登入後轉到 twitter登入,之後轉回原 你會發現你已經登入此 了,比如像 feedtwitter rss2twitteroauth是乙個開放的認證協議,讓你可以在web或桌面程式中使用簡單而...

OAuth認證協議原理分析及使用方法

twitter或豆瓣使用者一定會發現,有時候,在別的 點登入後轉到 twitter登入,之後轉回原 你會發現你已經登入此 了,比如像 feedtwitter rss2twitter oauth是乙個開放的認證協議,讓你可以在web或桌面程式中使用簡單而標準的,安全的api認證。網路開放是乙個不變的趨...

OAuth認證協議原理分析及使用方法

twitter或豆瓣使用者一定會發現,有時候,在別的 點登入後轉到 twitter登入,之後轉回原 你會發現你已經登入此 了,這種 就是這個效果。其實這都是拜 oauth所賜。oauth是乙個開放的認證協議,讓你可以在web或桌面程式中使用簡單而標準的,安全的api認證。網路開放是乙個不變的趨勢,那...