OAuth

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

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

OAUTH認證受權具備如下特色:網站

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

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

  • 服務提供方(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相關的三個URLblog

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

OAUTH相關的參數定義:token

  • oauth_consumer_key: 使用者的ID,OAUTH服務的直接使用者是開發者開發出來的應用。因此該參數值的獲取通常是要去OAUTH服務提供商處註冊一個應用,再獲取該應用的oauth_consumer_key。
  • oauth_consumer_secret:oauth_consumer_key對應的密鑰。
  • oauth_signature_method: 請求串的簽名方法,應用每次向OAUTH三個服務地址發送請求時,必須對請求進行簽名。簽名的方法有:HMAC-SHA一、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
相關文章
相關標籤/搜索