我想在OpenID Connect代码流中找出state
和nonce
的优点。
从我到目前为止所读到的,主要攻击似乎是攻击者可以拦截身份验证响应,包括授权代码。 但是,如果攻击者重放了身份验证响应,则已经使用了auth代码,OP将拒绝令牌请求。 我看到,规范不要求授权代码是一次性密码,在这种情况下,我看到如何重放是可能的。但是,我们在使用后使auth代码无效。
我也明白,使用CSRF,攻击者可以使用不同的身份验证代码调用我的客户端redirect-uri。我还没有看到该代码在OP上的有效性。攻击者是否可以猜测有效的身份验证代码?
有人能告诉我一个攻击向量,用状态和/或随机数解决了吗?
答案 0 :(得分:3)
OpenID Connect来自OAuth 2.0的固有状态参数。 Nonce 参数附带OpenID Connect规范。它们有两个不同的目的。这是一个link到SO的答案,可以解释它们。
在授权代码流程中,您有两个步骤。首先,您将收到身份验证代码,然后使用身份验证代码获取令牌。当您在重定向网址收到回复时,必须有一种方法来识别您发送的请求的响应。状态值通过绑定请求和响应来解决此问题。它应该验证响应的客户端。
授权码是短暂的(30到120秒)。我不知道它对于许多请求是否相同。通常代码必须是一次性密码。
Nonce 将令牌连接到原始客户端请求。如果授权代码请求中存在nonce,则它必须存在于从成功的OpenID Connect流接收的id令牌中。这样,客户端就知道为自己生成令牌。并且它不会消耗某个恶意方注入的令牌。