本文不介紹oauth,只是記錄我對oauth的一些疑問,對oauth的學習,建議移步的阮一峰的網路日誌-oauth篇。另外下面oauth指的都是2.0版本
不擔心。該碼有效期通常為10分鐘,並且與客戶端id和重定向uri,是一一對應關係。另外授權碼只能用一次,第二次使用會讓使用該授權碼獲取的token失效,所以攻擊者最多會讓你出現登入意外失敗,但無法獲取你的資料
假設使用者已經獲得授權,則下次登入時只需要驗證access_token是否有效,無效則重新獲取授權,有效則無需重新獲得授權。正常的授權流程如下
李四csrf的流程登入a**
,並跳轉oauth提供者b,b授權後將重定向到www.aaaa.com?code=******x
a拿到code後想b請求token,a拿到token後向b請求李四在b上的個人資訊,比如unionida在拿到unionid後會將李四在a**上的uid進行繫結,從而實現李四在b上的賬號可以登入a**
李四解決方案登入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)1.0的資料傳輸安全是基於簽名,2.0是基於https引導使用者到授權伺服器請求授權
用授權令牌到授權伺服器換取訪問令牌(access token&secret)
用訪問令牌去訪問得到授權的資源
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....