OAuth2 0的一些疑問

2021-09-27 10:43:06 字數 1758 閱讀 7676

本文不介紹oauth,只是記錄我對oauth的一些疑問,對oauth的學習,建議移步的阮一峰的網路日誌-oauth篇。另外下面oauth指的都是2.0版本

不擔心。該碼有效期通常為10分鐘,並且與客戶端id和重定向uri,是一一對應關係。另外授權碼只能用一次,第二次使用會讓使用該授權碼獲取的token失效,所以攻擊者最多會讓你出現登入意外失敗,但無法獲取你的資料

假設使用者已經獲得授權,則下次登入時只需要驗證access_token是否有效,無效則重新獲取授權,有效則無需重新獲得授權。

正常的授權流程如下

李四登入a**,並跳轉oauth提供者b,b授權後將重定向到www.aaaa.com?code=******xa拿到code後想b請求token,a拿到token後向b請求李四在b上的個人資訊,比如unionid

a在拿到unionid後會將李四在a**上的uid進行繫結,從而實現李四在b上的賬號可以登入a**

csrf的流程

李四登入a**,並跳轉oauth提供者b,b授權後將重定向到www.aaaa.com?code=******x李四拿到這個code之後不繼續想b請求token,而是想辦法誘導張三訪問www.aaaa.com?code=******x此時a就拿著李四的code去請求token,並獲取李四的unionid

在進行繫結時就是將李四b賬號與張三a賬號進行繫結

最後李四就可以利用自己的b賬號登入張三的a賬號,進行為所欲為的操作

備註:因為code的時效性,這種攻擊需要被攻擊者在code有效期內完成

解決方案

在第一步傳重定向位址的同時傳乙個state

在授權成功進行重定向是b也會將state傳給重定向位址www.aaaa.com?code=******x&state=wwwwww在a用code向b獲取token前對state做驗證,驗證不通過就判定是異常請求

state引數值需要具備下面幾個特性:

不可**性:足夠的隨機,使得攻擊者難以猜到正確的引數值

關聯性:state引數值和當前使用者會話(user session)是相互關聯的

唯一性:每個使用者,甚至每次請求生成的state引數值都是唯一的

時效性:state引數一旦被使用則立即失效

引導使用者到授權伺服器,請求使用者授權,使用者授權後返回 授權碼(authorization code)

客戶端由授權碼到授權伺服器換取訪問令牌(access token)

用訪問令牌去訪問得到授權的資源

客戶端到授權伺服器請求乙個授權令牌(request token&secret)

引導使用者到授權伺服器請求授權

用授權令牌到授權伺服器換取訪問令牌(access token&secret)

用訪問令牌去訪問得到授權的資源

1.0的資料傳輸安全是基於簽名,2.0是基於https

1.0沒有對重定向位址做任何驗證也沒有做簽名,1.0a緊急修復讓重定向位址參與簽名。2.0取消簽名,但授權方會對重定向位址進行校驗(開發者會向授權方提交網域名稱)

OAuth2 0的認證流程

oauth2.0的認證流程 在oauth2.0的處理流程,主要分為以下四個步驟 1 得到授權碼code 2 獲取access token 3 通過access token,獲取openid 4 通過access token及openid呼叫api,獲取使用者授權資訊 上面是流程的大概四個步驟,在下面...

OAuth2 0的原理介紹

oauth2.0是乙個關於授權 authorization 的開放網路標準,在全世界得到廣泛應用,目前的版本是2.0版。授權碼模式 authorization code 簡化模式 implicit 密碼模式 resource owner password credentials 客戶端模式 clie...

Oauth2 0與Oauth1 0的區別

oauth1.0與oauth2.0的區別 雲計算的熱火,引出了大量的開放平台,各種第三方應用建立在開放平台之上,對於安全性的要求,於是出現了oauth協議,2007年發布了oauth1.0協議,同時又開始了oauth2.0的討論,2.0的草案與2011年發布。新的2.0與1.0不相容。下面說一說2....