OAuth 2.0定義了客戶端請求發送的「狀態」參數,以防止跨站請求攻擊。在OpenID規範中也提到了「nonce」。除了在ID標記中返回「nonce」而不是查詢參數的事實之外,它們似乎具有完全相同的用途。如果有人可以解釋爲什麼他們是分開的OAuth 2.0「狀態」和OpenID「nonce」參數之間的區別?爲什麼國家不能重複使用?
5
A
回答
6
狀態和隨機數似乎是相似的。但是如果你深入挖掘,你會發現它們有不同的用途。
狀態是否有保護最終用戶免受跨站請求僞造(CSRF)攻擊。
RFC6749指出,
一旦授權被從最終用戶所獲得,所述 授權服務器的最終用戶的用戶代理重定向回 客戶端與包含在所需要的結合值「狀態」 參數。所述結合值使得客戶端通過匹配結合值到 用戶代理的認證狀態
來驗證該請求的有效性 ,這是用於授權請求。它使客戶能夠驗證授權響應沒有被改變。基本上它允許客戶交叉檢查授權請求和響應。
隨機數服務於不同的目的。它將令牌與客戶綁定。它用作令牌驗證參數。
隨機數 - 用於與ID令牌客戶端會話相關聯,並減輕重放攻擊的字符串值。該值從未經修改的身份驗證請求傳遞給ID令牌。如果存在於ID令牌中,則客戶端必須驗證該隨機的聲明值等於在認證請求中發送的隨機數參數的值。如果認證請求中存在,授權服務器必須在ID令牌中包含一個隨機數聲明,聲明值是在認證請求中發送的隨機數值。授權服務器應該對所使用的nonce值執行任何其他處理。 nonce值是區分大小寫的字符串
正如您所見,nonce值來自授權請求並由客戶端生成。如果包含nonce,它將出現在令牌中。因此,客戶端可以根據初始授權請求驗證其收到的令牌,從而確保令牌的有效性。
此外,根據流量類型,現時值可以是強制參數。隱式流和混合流授權值現時值值。
相關問題
- 1. OAuth和OAuth 2.0有什麼區別?
- 2. OpenID和OpenID Connect有什麼區別?
- 3. 「nonce」和「GUID」有什麼區別?
- 4. 爲什麼Web OAuth的Google OAuth 2.0文檔沒有提及「狀態」參數?
- 5. MEM_RESERVE和MEM_COMMIT狀態之間的確切區別是什麼?
- 6. OAuth 2.0和OpenID Connect
- 7. ACTIVE和NORMAL狀態之間的區別
- 8. 中有什麼函數參數和參數之間......區別
- 9. 爲非美國國家創建狀態和區域
- 10. 歷史學家和數據倉庫之間有什麼區別?
- 11. 參數和參數之間的區別
- 12. {參數}和參數之間的區別?
- 13. OAuth 2.0之間的區別兩條腿和三條腿實現
- 14. ActionScript 2.0和ActionScript 3.0之間的區別是什麼
- 15. 狀態圖和有限狀態機(FSM)之間的區別?
- 16. 視圖狀態和控制狀態之間的區別
- 17. 無狀態和有狀態壓縮之間的區別?
- 18. 使用PyCharm重構時,Remove和Exclude之間有什麼區別?
- 19. Catalyst:中的參數和:CaptureArgs之間有什麼區別?
- 20. 功能參數之間的區別
- 21. LogCat和LogCat(不建議使用)之間的區別是什麼?
- 22. django-openid和django-openid-auth之間的區別?
- 23. Angular 2.0 - @ViewQuery和@Query之間有什麼區別
- 24. 樂高頭腦風暴1.0和2.0之間有什麼區別
- 25. rxjava 2.0 Observable.subscribe和Observable.subscribeActual之間有什麼區別?
- 26. requestValidationMode 2.0和4.0之間有什麼區別
- 27. SproutCore 1.x和2.0之間有什麼區別?
- 28. CLR 2.0和CLR 4.0之間的區別
- 29. NMock 2.0和NMock2之間的區別
- 30. ActionScript 2.0和3.0之間的區別...?
如果我們將狀態本身作爲隨機數傳遞給ID標記,並且在ID之外,那麼會有什麼壞處?使用外部阻止CSRF和內部阻止在客戶端綁定會話。 – dvsakgec
@dvsakgec從協議的角度來看,利用狀態和隨機數來進行安全性和驗證是個問題。據我所知,規範並不限制你爲狀態和隨機數使用相同的值。在複雜的攻擊向量中,人們可以從授權響應中提取狀態值(例如: - 移動應用程序)。因此,具有相同的值會從您的令牌驗證過程中刪除一個條件,這並不好 –