oauth三方登錄的原理

一 說明
OAuth是由Blaine Cook、Chris Messina、Larry Halff 及David Recordon共同發起的,目的在於爲API訪問受權提供一個開放的標準(resful和webservice均可以)。OAuth規範的1.0版於2007年12月4日發佈。
經過官方網址: https://oauth.net/能夠閱讀更多的相關信息。
 
二 OAUTH認證受權具備如下特色:
1. 簡單:無論是OAUTH服務提供者仍是應用開發者,都很容易於理解與使用;
2. 安全:沒有涉及到用戶密鑰(帳號/密碼)等信息,更安全更靈活;
3. 開放:任何服務提供商均可以實現OAUTH,任何軟件開發商均可以使用OAUTH;
 
 
3、OAUTH相關術語
    在弄清楚OAUTH流程以前,咱們先了解下OAUTH的一些術語的定義:
  • 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。如Yahoo該值的註冊地址爲:https://developer.yahoo.com/dashboard/
  • 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
 
 
 
4、OAUTH認證受權流程(微博,微信,qq登錄都是如此)
    在弄清楚了OAUTH的術語後,咱們能夠對OAUTH認證受權的流程進行初步認識。其實,簡單的來講,OAUTH認證受權就三個步驟,三句話能夠歸納:
1. 獲取未受權的Request Token
2. 獲取用戶受權的Request Token
3. 用受權的Request Token換取Access Token
    當應用拿到Access Token後,就能夠有權訪問用戶受權的資源了( 能夠選擇只要三方登錄功能,不要數據)。
 
 
五 參數調用說明
具體每步執行信息以下:
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訪問用戶受權的資源。
 
 
從上面的步驟能夠看出,用戶始終沒有將其用戶名與密碼等信息提供給使用者(第三方軟件),從而更安全。
相關文章
相關標籤/搜索