1. 程式人生 > >oAuth的認知以及開發流程

oAuth的認知以及開發流程

oauth 第三方登錄

什麽是OAUTH

OAUTH協議為用戶資源的授權提供了一個安全的、開放而又簡易的標準。與以往的授權方式不同之處是OAUTH的授權不會使第三方觸及到用戶的帳號信息(如用戶名與密碼),即第三方無需使用用戶的用戶名與密碼就可以申請獲得該用戶資源的授權,因此OAUTH是安全的。oAuth是Open Authorization的簡寫。

OAUTH定義

OAUTH是一種開放的協議,為桌面、手機或web應用提供了一種簡單的,標準的方式去訪問需要用戶授權的API服務。OAUTH類似於Flickr Auth、Google‘s AuthSub 、Yahoo‘s BBAuth、 Facebook Auth等。

相關術語

在弄清楚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。

    • 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


OAUTH認證授權流程

在弄清楚了OAUTH的術語後,我們可以對OAUTH認證授權的流程進行初步認識。其實,簡單的來說,OAUTH認證授權就三個步驟,三句話可以概括:

1. 獲取未授權的Request Token

2. 獲取用戶授權的Request Token

3. 用授權的Request Token換取Access Token

當應用拿到Access Token後,就可以有權訪問用戶授權的資源了。大家肯能看出來了,這三個步驟不就是對應OAUTH的三個URL服務地址嘛。一點沒錯,上面的三個步驟中,每個步驟分別請求一個URL,並且收到相關信息,並且拿到上步的相關信息去請求接下來的URL直到拿到Access Token

QQ OAuth2.0開發流程

Step1. 準備工作

接入QQ登錄前,需要首先進行申請,獲得對應的appidappkey,以保證後續流程中可正確對應用與用戶進行驗證與授權。
同時,需要保證連接暢通。

Step2. 放置QQ登錄按鈕

在移動應用界面上放置“QQ登錄按鈕,並為按鈕添加前臺代碼,實現點擊按鈕即彈出QQ登錄對話框。

Step3. 獲取Access Token

通過用戶驗證登錄和授權,獲取Access Token,為下一步獲取用戶的OpenID做準備;
同時,Access Token是應用在調用OpenAPI訪問和修改用戶數據時必須傳入的參數。
access token由每次用戶登錄時生成,過期時間默認為三個月,用戶再次登錄時自動刷新,請移動應用做好防過期策略,或過期後提示用戶再次授權。

QQ登錄OAuth2.0針對移動應用接入,提供了登錄驗證和授權流程,主要提供以下獲取access token的方式:
OAuth官方文檔中提到的Implicit模式,適用於需要通過客戶端訪問的方式。

Step4. 通過Access Token獲取用戶的OpenID

通過輸入在上一步獲取的Access Token,得到對應用戶身份的OpenID
OpenID是此網站上或應用中唯一對應用戶身份的標識,網站或應用可將此ID進行存儲,便於用戶下次登錄時辨識其身份,或將其與用戶在網站上或應用中的原有賬號進行綁定。

Step5. 調用OpenAPI,來請求訪問或修改用戶授權的資源

獲取到Access TokenOpenID後,可通過調用OpenAPI來獲取或修改用戶個人信息。

調用OpenAPI時需要用到如下3個值:
YOUR_APP_ID:即申請QQ登錄成功後分配的appid(如222222
YOUR_ACCESS_TOKENStep3獲取到的Access Token,必須保證未過期(如E0632E6CE12AC709999
YOUR_OPENIDStep4獲取到的OpenID,用戶唯一標識(如B9DD537D1C5C98A9999




本文出自 “林元煌的博客” 博客,請務必保留此出處http://lyhmm.blog.51cto.com/1797932/1934305

oAuth的認知以及開發流程