【问题标题】:Purpose of state and nonce in OpenID Connect Code flowOpenID Connect 代码流中状态和随机数的用途
【发布时间】:2018-06-19 15:09:19
【问题描述】:

我正在尝试找出 state 和 nonce 在 OpenID Connect 代码流中的用途。

从我目前阅读的内容来看,主要攻击似乎是攻击者可以拦截身份验证响应,包括授权码。 但是,如果攻击者重放身份验证响应,则身份验证代码将已被使用,并且 OP 将拒绝令牌请求。 我看到,规范不要求将身份验证代码作为一次性密码,在这种情况下,我知道如何进行重放。但是,我们会在使用后使验证码失效。

我还了解到,使用 CSRF,攻击者可以使用不同的身份验证代码调用我的客户端 redirect-uri。我还没有看到该代码在 OP 中如何有效。攻击者可以猜测一个有效的验证码吗?

谁能给我看一个攻击向量,用状态和/或随机数解决?

【问题讨论】:

  • 在 Wanpeng Li(B) 和 Chris J. Mitchell 的“Analysing the Security of Google’s Implementation of OpenID Connect”中,如果客户端未能发送 state 值(第 366 页),则有一个会话交换攻击示例)。
  • 谢谢你,有趣的论文!然而,它只给出了状态的解释。有人知道随机数有什么用吗? – elactic 4 小时前

标签: openid-connect


【解决方案1】:

OpenID Connect 从 OAuth 2.0 继承 state 参数。 nonce 参数随 OpenID Connect 规范提供。他们有两个不同的目的。这是一个link 对一个解释它们的 SO 答案。

在授权流程中,您有两个步骤。首先,您会收到一个授权码,然后您使用该授权码来获取访问令牌。当您在重定向 URL 处收到响应时,必须有一种方法来验证响应是否来自您发送的请求。 state 值通过绑定请求和响应解决了这个问题。应该验证响应的是客户端。

授权码的寿命很短(30 到 120 秒),我认为它不会对许多请求都相同。通常密码必须是一次性密码。

nonce 将令牌连接到原始客户端请求。如果nonce 存在于授权代码请求中,则它必须存在于从成功的 OpenID Connect 流接收的 id 令牌中。这样,客户端就知道令牌是为自己生成的,它不会消耗某个恶意方注入的令牌。

【讨论】:

    猜你喜欢
    • 2019-12-26
    • 2018-05-20
    • 2017-06-28
    • 2015-12-11
    • 2016-02-13
    • 2010-12-29
    • 2023-03-27
    • 2015-02-05
    • 1970-01-01
    相关资源
    最近更新 更多