OAuth 2.0 定义了客户端在请求中发送的“状态”参数,以防止跨站请求攻击。 OpenID 规范中也提到了“nonce”。除了 ID 令牌而不是查询参数中返回“nonce”这一事实之外,它们似乎具有完全相同的目的。如果有人能解释他们为什么分开
状态和随机数似乎很相似。但如果你深入挖掘,你会发现它们有不同的用途。
State是为了保护最终用户免受跨站点请求伪造(CSRF)攻击。从OAuth 2.0协议引入RFC6749 https://www.rfc-editor.org/rfc/rfc6749#section-10.12。协议规定,
一旦获得最终用户的授权,
授权服务器将最终用户的用户代理重定向回
客户端与包含在所需的绑定值"state"范围。绑定值使客户端能够验证
通过将绑定值与
用户代理的身份验证状态
这用于授权请求。它使客户端能够验证授权响应未被更改并由原始服务器发送。请求已发送。简而言之,它允许客户端交叉检查授权请求和响应。
(更详细地说:要接受授权代码响应,客户端需要接受来自授权服务器的响应(例如:- 在网络应用程序中,这可以通过重定向和表单发布到后端来完成)。这意味着我们的客户端应用程序有一个打开并接受请求的端点。状态参数通过将原始授权请求绑定到响应来保护该端点。这就是 CSRF 保护。)
Nonce服务于不同的目的。它将令牌与客户端绑定。它用作令牌验证参数并从OpenID 连接规范 https://openid.net/specs/openid-connect-core-1_0.html#CodeFlowSteps.
nonce- 用于将客户端会话与 ID 令牌相关联并减轻重放攻击的字符串值。该值未经修改地从身份验证请求传递到 ID 令牌。如果 ID 令牌中存在,则客户端必须验证随机数声明值是否等于身份验证请求中发送的随机数参数的值。如果出现在身份验证请求中,授权服务器必须在 ID 令牌中包含一个随机数声明,该声明值是身份验证请求中发送的随机数值。授权服务器不应该对使用的随机数值执行其他处理。 nonce 值是区分大小写的字符串
如您所见,nonce 值源自授权请求,由客户端生成。如果包含随机数,它将出现在令牌中。因此,客户端可以根据初始授权请求验证其收到的令牌,从而确保令牌的有效性。
此外,根据流量类型,nonce可以是强制参数。隐式流程和混合流程指令nonce价值。两个值都是生成的 and 已验证通过客户应用程序。
为什么状态不能重用?
如果捕获到授权请求,则恶意方可以伪造授权响应。这可以通过改变状态参数来避免。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)