OAuth

由 webmaster 在 四, 2011/12/29 - 20:05 發表

 

OAuth(開放授權)是一個開放標準,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯繫人列表),而無需將用戶名和密碼提供給第三方應用。

OAuth允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站(例如,視頻編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth允許用戶授權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不需要分享他們的訪問許可或他們數據的所有內容。

OAUTH認證授權具有以下特點:

  • 簡單:不管是OAUTH服務提供者還是應用開發者,都很容易於理解與使用。
  • 安全:沒有涉及到用戶密鑰等信息,更安全更靈活;
  • 開放:任何第三方都可以使用OAUTH認證服務,任何服務提供商都可以實現自身的OAUTH認證服務;

在認證和授權的過程中涉及的三方包括:

  • 服務提供方(Service Provider),用戶使用服務提供方來存儲受保護的資源,如照片,視頻,聯繫人列表。
  • 用戶(User),存放在服務提供方的受保護的資源的擁有者。
  • 客戶端 (Consumer),要訪問服務提供方資源的第三方應用,通常是網站,如提供照片打印服務的網站。在認證過程之前,客戶端要向服務提供者申請客戶端標識。

使用OAuth進行認證和授權的過程如下所示:

  • A. 使用者(第三方軟件)向OAUTH服務提供商請求未授權的Request Token。向Request Token URL發起請求,請求需要帶上的參數見上圖。
  • B. OAUTH服務提供商同意使用者的請求,並向其頒發未經用戶授權的oauth_token與對應的oauth_token_secret,並返回給使用者。
  • C. 使用者向OAUTH服務提供商請求用戶授權的Request Token。向User Authorization URL發起請求,請求帶上上步拿到的未授權的token與其密鑰。
  • D. OAUTH服務提供商將引導用戶授權。該過程可能會提示用戶,你想將哪些受保護的資源授權給該應用。此步可能會返回授權的Request Token也可能不返回。如Yahoo OAUTH就不會返回任何信息給使用者。
  • E. Request Token 授權後,使用者將向Access Token URL發起請求,將上步授權的Request Token換取成Access Token。請求的參數見上圖,這個比第一步A多了一個參數就是Request Token。
  • F. OAUTH服務提供商同意使用者的請求,並向其頒發Access Token與對應的密鑰,並返回給使用者。
  • G. 使用者以後就可以使用上步返回的Access Token訪問用戶授權的資源。

OAUTH 相關的三個URL 

  • Request Token URL: 獲取未授權的Request Token服務地址;
  • User Authorization URL: 獲取用戶授權的Request Token服務地址;
  • Access Token URL: 用授權的Request Token換取Access Token的服務地址;

OAUTH 相關的參數定義:

  • oauth_consumer_key: 使用者的ID,OAUTH服務的直接使用者是開發者開發出來的應用。所以該參數值的獲取一般是要去OAUTH服務提供商處註冊一個應用,再獲取該應用的oauth_consumer_key。
  • oauth_consumer_secret:oauth_consumer_key對應的密鑰。
  • oauth_signature_method: 請求串的簽名方法,應用每次向OAUTH三個服務地址發送請求時,必須對請求進行簽名。簽名的方法有:HMAC-SHA1、RSA-SHA1與PLAINTEXT等三種。
  • oauth_signature: 用上面的簽名方法對請求的簽名。
  • oauth_timestamp: 發起請求的時間戳,其值是距1970 00:00:00 GMT的秒數,必須是大於0的整數。本次請求的時間戳必須大於或者等於上次的時間戳。
  • oauth_nonce: 隨機生成的字符串,用於防止請求的重放,防止外界的非法攻擊。
  • oauth_version: OAUTH的版本號,可選,其值必須為1.0。

OAUTH HTTP 響應代碼:

HTTP 400 Bad Request 請求錯誤

  • Unsupported parameter 參數錯誤
  • Unsupported signature method 簽名方法錯誤
  • Missing required parameter 參數丟失
  • Duplicated OAuth Protocol Parameter 參數重複

HTTP 401 Unauthorized 未授權

  • Invalid Consumer Key 非法key
  • Invalid / expired Token 失效或者非法的token
  • Invalid signature 簽名非法
  • Invalid / used nonce 非法的nonce

參考資料

http://oauth.net/

http://article.yeeyan.org/view/freewizard/4418

本文來自:http://www.biaodianfu.com/learn-oauth.html 

Read more >>

關於EC ONE ECONE-top-right.png