【问题标题】:OpenID Connect ID Token: What's the purpose of audience [aud] field validationOpenID Connect ID Token:观众 [aud] 字段验证的目的是什么
【发布时间】:2017-01-16 05:54:24
【问题描述】:

我正在尝试实现OpenID Connect Implicit Flow。前端单页应用程序将 ID 令牌向下传递到后端服务器(使用授权标头),我需要在其中对其进行验证。

文档要求我 to check 我信任令牌的受众(aud 和 azp 字段)。我正在努力理解此验证步骤的重要性以及不这样做的安全影响。如果我不是预期的接收者,为什么要不信任令牌?

我的理由是,如果我信任发行人,那么为谁发行代币并不重要。我希望任何 clientId 的声明都是相同的(这是错误的吗?)。理想情况下,当我在我的微服务周围传递 ID 令牌时,他们应该知道的就是要信任的发行者(并使用 discovery protocol 找出密钥)。

如果我跳过此验证步骤,攻击向量是什么?

【问题讨论】:

    标签: security microservices openid-connect


    【解决方案1】:

    发行者可能正在向不同的应用程序发行令牌,而这些应用程序可能具有不同的权限。不检查受众将允许攻击者在应用程序 B 使用为应用程序 A 颁发的令牌,并可能导致权限提升。

    根据您的建议:每个客户的声明可能确实不同。

    【讨论】:

      【解决方案2】:

      我为后代回答这个问题。

      如果您从外部 OpenId 提供者接收令牌,您应该检查发行者以及您的 client_id 是否是受众中唯一的一个。一个可能比你的客户拥有更多的东西。

      声明对于 OpenID 提供者来说不是全局的,它们可以是每个客户端的。用户可以在 app-A 上拥有“管理员”角色,在那里获取令牌,然后尝试向 app-B(您的应用程序)发送相同的令牌,希望您没有检查它是为哪个客户端(其受众)发出的。

      【讨论】:

        猜你喜欢
        • 2021-06-15
        • 2015-06-27
        • 1970-01-01
        • 2014-09-12
        • 2020-04-22
        • 2015-04-23
        • 2014-10-30
        • 2020-06-29
        相关资源
        最近更新 更多