OAuth的機制原理講解及開發流程

2022-08-16 01:03:14 字數 4622 閱讀 4709

本想前段時間就把自己通過qq oauth1.0、oauth2.0協議進行驗證而實現qq登入的心得及demo例項分享給大家,可一直很忙,今天抽點時間說下oauth1.0協議原理,及講解下qq對於oauth1.0的認證開發。閒話多說了點,下面直接進入主題。

1、oauth的簡述

oauth(open authorization,開放授權)是為使用者資源的授權定義了乙個安全、開放及簡單的標準,第三方無需知道使用者的賬號及密碼,就可獲取到使用者的授權資訊,並且這是安全的。(我喜歡簡單明瞭,這裡沒看懂,沒關係,接著往下面看)

2、oauth的原理

(流程圖)

我在圖上分了四個步驟,下面是四步的講解:

第四步:授權後,第三方web即可訪問你剛才授權的資源資訊,比如:你的qq基本資訊-頭像、暱稱、性別等。

通過這個原理圖示及講解(圖是手工製作,有點草),相信大家都了解了oauth這個原理的乙個基本流程,若看不明白,你可以不用學習製作oauth了,開個玩笑。(這步後,大家知道什麼原理了,但還是無法知道oauth究竟是如何實現認證的,別急,接著往下看)

3、oauth 1.0的認證流程

在oauth 1.0認證中會用到三個重要的url:

第乙個:request token url,獲取未授權的token的url;

第二個:user authorization url,請求使用者對token進行授權的url;

第三個:request access url,使用token獲取access token的url。

上面是認證流程中用到的三個url,在下面的流程示意圖中會體現到,這是我講解oauth幻燈片的一頁,直接截圖下來進行講解:

第一步:**向認證平台請求乙個未授權的token,這個request token url是前面說的第乙個url;

第二步:跳轉至使用者授權頁面,提示使用者進行登入,並進行授權,返回獲得已授權的token,用到的user authorization url是前面說的第二個url;

4、qq oauth1.0認證中url的呼叫及引數的傳遞

4.1、請求未授權的臨時token

request token url(請求臨時token的url):

請求後,跳轉至引導使用者登入的url:

第乙個url請求引數包含如下內容:(紅色為必填、綠色為選填)

引數含義

oauth_consumer_key

oauth_nonce

隨機字串,所有oauth_nonce請使用int型值。

oauth_timestamp

oauth_version

版本號,請固定使用1.0

oauth_signature_method

簽名方法,請固定使用hmac-sha1。

oauth_signature

簽名值,用來提高傳輸過程引數的防篡改性。

簽名值的生成詳見【qq登入】簽名引數oauth_signature的說明

oauth_client_ip

使用者的ip位址(可選),int型

返回的引數有:oauth_token(臨時令牌)、oauth_token_secret(臨時金鑰對應的令牌)

第二個url需要傳遞的引數為:

引數含義

oauth_consumer_key

oauth_token

上一步中,得到的oauth_token

oauth_callback

返回的引數有:

引數含義

oauth_token

已授權的token

openid

oauth_signature

簽名值。如果**使用這一步返回的openid,則需要按規則生成簽名值,並與該簽名值比對,以驗證openid以及**的可靠性。

比對時生成簽名值的規則:使用hmac-sha1演算法,源串:openid+openid的timestamp(串中間不要新增'+'符號);金鑰:oauth_consumer_secret。

timestamp

openid的時間戳

oauth_vericode

授權驗證碼。

4.2、請求access token資料令牌

request access url(獲取access token請求url):

url請求引數包含如下內容:

引數含義

oauth_consumer_key

oauth_token

已授權的的token,上一步返回的oauth_token

oauth_nonce

隨機數oauth_timestamp

unix時間戳(從utc時間2023年1月1日00:00:00到當前時刻的秒數,不同語言中如何獲取請google/baidu之)

oauth_version

版本號,請固定使用1.0

oauth_signature_method

簽名方法,請固定使用hmac-sha1

oauth_signature

簽名值,用來提高傳輸過程引數的防篡改性。

簽名值的生成詳見【qq登入】簽名引數oauth_signature的說明

oauth_vericode

授權驗證碼,上一步返回的oauth_vericode

oauth_client_ip

使用者的ip位址(可選),int型

返回的引數如下:

引數含義

oauth_token

具有訪問許可權的access_token

oauth_token_secret

access_token的金鑰

openid

在第一步和本步驟中都返回了openid。使用本步驟返回的openid,更為安全

timestamp

openid的時間戳

oauth_signature

針對openid的簽名值

4.3、通過access token(資料令牌)呼叫api介面,獲取使用者授權資源

請求url: (這裡預設寫的是get_user_info介面

請求引數:

引數含義

oauth_consumer_key

oauth_token

上一步返回的oauth_token

oauth_nonce

隨機數,int型

oauth_timestamp

unix時間戳(從utc時間2023年1月1日00:00:00到當前時刻的秒數,不同語言中如何獲取請google/baidu之)。

oauth_version

版本號,固定使用1.0

oauth_signature_method

簽名方法,固定使用hmac-sha1

oauth_signature

簽名值,用來提高傳輸過程引數的防篡改性。

簽名值的生成詳見【qq登入】簽名引數oauth_signature的說明

openid

上一步返回的openid。

oauth_client_ip

使用者的ip位址(可選),int型

好了,上面就是整個qq oauth1.0認證流程中url引數的請求與返回說明,這oauth1.0認證中,你會發現引數特別多,還有經過hmac-sha1加密、簽名等操作,特別麻煩、繁瑣,所以還是最好推薦使用oauth 2.0認證協議進行介面開發。

oauth_qq登入_公共返回碼說明:點選進入。

5、oauth2.0的認證流程

在oauth2.0的處理流程,主要分為以下四個步驟:

1)得到授權碼code

2)獲取access token

3)通過access token,獲取openid

4)通過access token及openid呼叫api,獲取使用者授權資訊

第一步:首先直接跳轉至使用者授權位址,即圖示 request user url ,提示使用者進行登入,並給予相關資源授權,得到唯一的auth code,這裡注意的是code只有10分鐘的有效期,對於安全考慮,相對於oauth 1.0省了一步獲取臨時的token,並且有效期也進行了控制,比1.0認證簡化了很多,並安全一些;

第二步:得到授權code後,這一步就是請求access token,通過 圖示 request access url ,生成得到資料token;

第三步:通過access token請求openid,openid是使用者在此平台的唯一標識,通過圖示 request info url 請求,然後得到openid;

最後,分享自己關於oauth1.0、2.0認證流程講解的幻燈片,結合文章來看,你會更容易理解。

OAuth 授權過程工作原理講解

sso與多平台登入 sso一般用於同一單位的多個站點的登陸狀態保持,技術上一般參考cas協議 多平台登入一般是oauth體系的協議,有多種認證模式但是不具備會話管理和狀態保持。不過從本質上講,我覺得兩者都是通過可信的第三方進行身份驗證,如果說同一單位的多個子系統共同只圍繞乙個第三方賬戶 可以稱為認證...

OAuth認證實現機制及單點登入原理

oauth認證是為了做到第三方應用在未獲取到使用者敏感資訊 如 賬號密碼 使用者pin等 的情況下,能讓使用者授權予他來訪問開放平台 主要訪問平台中的資源伺服器resource server 中的資源介面。其流程主要是 使用者首先要保持登入,即已認證通過的狀態 第三方應用請求使用者授權 我理解是彈出...

HTTP快取機制及原理

前言 http 快取機制作為 web 效能優化的重要手段,對於從事 web 開發的同學們來說,應該是知識體系庫中的乙個基礎環節,同時對於有志成為前端架構師的同學來說是必備的知識技能。但是對於很多前端同學來說,僅僅只是知道瀏覽器會對請求的靜態檔案進行快取,但是為什麼被快取,快取是怎樣生效的,卻並不是很...