Auth認證協議原理分析及使用方法
阿新 • • 發佈:2019-02-01
OAuth是什麼?
OAuth是一個開放的認證協議,讓你可以在Web或桌面程式中使用簡單而標準的,安全的API認證。
OAuth有什麼用?為什麼要使用OAuth?
網路開放是一個不變的趨勢,那麼不可避免的會有各種網路服務間分享內容的需要。
舉個我們身邊國內的例子吧:比如人人網想要呼叫QQ郵箱的聯絡人列表,現在的方法是你需要在人人網輸入你的QQ號,QQ密碼才能呼叫,雖然網站上可能都自謂“不保留QQ使用者名稱密碼”,但是大家信嗎?
OAuth就是為了解決這個問題而誕生的,使用者訪問第三方資源,不再需要網站提交你的使用者名稱,密碼。這樣好處自己是安全,而且不會洩露你的隱私給不信任的一方。
OAuth原理
OAuth中有三方:一,使用者;二,Consumer(不知雜翻譯,類似上面的 twitterfeed 角色);三,服務提供商(如上例的twitter角色)。
一,Consumer 向 服務提供商 申請接入許可權
可得到:Consumer Key,Consumer Secret。twitter申請oauth的話,在 setting - connection - developer 裡面申請。 同時給出三個訪問網址:
六,取得 訪問另牌 後,
Consumer就可以作為使用者的身份訪問 服務提供商上被保護的資源了。提交的引數如下:
OAuth安全機制是如何實現的?
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(混淆碼)是否已經被使用。 那麼這樣攻擊者就無法自已生成 簽名,或者偷你的簽名來使用了。
- request_token_url = 'http://twitter.com/oauth/request_token'
- access_token_url = 'http://twitter.com/oauth/access_token'
- authorize_url = 'http://twitter.com/oauth/authorize'
- oauth_consumer_key:Consumer Key
- oauth_signature_method:簽名加密方法
- oauth_signature:加密的簽名 (這個下面細說)
- oauth_timestamp:UNIX時間戳
- oauth_nonce:一個隨機的混淆字串,隨機生成一個。
- oauth_version:OAuth版本,可選,如果設定的話,一定設定為 1.0
- oauth_callback:返回網址連結。
- 及其它服務提供商定義的引數
- oauth_consumer_key:Consumer Key
- oauth_token:上面取得的 請求另牌的名
- oauth_signature_method:簽名加密方法
- oauth_signature:加密的簽名 (這個下面細說)
- oauth_timestamp:UNIX時間戳
- oauth_nonce:一個隨機的混淆字串,隨機生成一個。
- oauth_version:OAuth版本,可選,如果設定的話,一定設定為 1.0
- oauth_verifier:上面返回的驗證碼。
- 請求 訪問另牌的時候,不能加其它引數。
六,取得 訪問另牌 後,
Consumer就可以作為使用者的身份訪問 服務提供商上被保護的資源了。提交的引數如下:
- oauth_consumer_key:Consumer Key
- oauth_token:訪問另牌
- oauth_signature_method:簽名加密方法
- oauth_signature:加密的簽名 (這個下面細說)
- oauth_timestamp:UNIX時間戳
- oauth_nonce:一個隨機的混淆字串,隨機生成一個。
- oauth_version:OAuth版本,可選,如果設定的話,一定設定為 1.0
- 及其它服務提供商定義的引數
OAuth安全機制是如何實現的?
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(混淆碼)是否已經被使用。 那麼這樣攻擊者就無法自已生成 簽名,或者偷你的簽名來使用了。