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. “nonce”和“GUID”有什么区别?
- 3. 为什么Web OAuth的Google OAuth 2.0文档没有提及“状态”参数?
- 4. MEM_RESERVE和MEM_COMMIT状态之间的确切区别是什么?
- 5. OAuth 2.0和OpenID Connect
- 6. 中有什么函数参数和参数之间......区别
- 7. 参数和参数之间的区别
- 8. {参数}和参数之间的区别?
- 9. OAuth 2.0之间的区别两条腿和三条腿实现
- 10. ActionScript 2.0和ActionScript 3.0之间的区别是什么
- 11. 无状态和有状态压缩之间的区别?
- 12. 状态图和有限状态机(FSM)之间的区别?
- 13. 功能参数之间的区别
- 14. LogCat和LogCat(不建议使用)之间的区别是什么?
- 15. SproutCore 1.x和2.0之间有什么区别?
- 16. requestValidationMode 2.0和4.0之间有什么区别
- 17. rxjava 2.0 Observable.subscribe和Observable.subscribeActual之间有什么区别?
- 18. 乐高头脑风暴1.0和2.0之间有什么区别
- 19. django-openid和django-openid-auth之间的区别?
- 20. NMock 2.0和NMock2之间的区别
- 21. CLR 2.0和CLR 4.0之间的区别
- 22. ActionScript 2.0和3.0之间的区别...?
- 23. Doctrine 1.0.7和Doctrine 2.0之间的区别?
- 24. DLNA 1.5和2.0之间的区别
- 25. 只有一个参数时,$ @和$ 1之间有什么区别?
- 26. 使用可选参数F#重载函数之间的区别
- 27. ++和:haskell之间的区别是什么?
- 28. $(())和expr之间的区别是什么?
- 29. $(...)和`...`之间的区别是什么
- 30. [undefined]和[,]之间的区别是什么?
如果我们将状态本身作为随机数传递给ID标记,并且在ID之外,那么会有什么坏处?使用外部阻止CSRF和内部阻止在客户端绑定会话。 – dvsakgec
@dvsakgec从协议的角度来看,利用状态和随机数来进行安全性和验证是个问题。据我所知,规范并不限制你为状态和随机数使用相同的值。在复杂的攻击向量中,人们可以从授权响应中提取状态值(例如: - 移动应用程序)。因此,具有相同的值会从您的令牌验证过程中删除一个条件,这并不好 –