【问题标题】:Azure AD token validation - why validate issuer?Azure AD 令牌验证 - 为什么要验证颁发者?
【发布时间】:2023-03-18 20:54:01
【问题描述】:

我有一个使用 Azure AD 令牌进行身份验证和授权的 API 服务。我计划为此使用 https://github.com/AzureAD/passport-azure-ad 库,并且需要使用 BearerStrategy - https://github.com/AzureAD/passport-azure-ad#42-bearerstrategy。我对validateIssuer 属性感到困惑。 如果我正确理解文档,validateIssuerissuer 配置需要一起使用。 issuer 是一个 URL,其中包含租户 ID 和用于颁发令牌的 AD 版本(1 或 2)。 作为将验证令牌的 API 服务,为什么 API 服务会关心用于颁发令牌的 AD 版本?因此,当它应该只关心租户 ID 时,它为什么要验证颁发者 url?我试图理解为什么必须验证整个颁发者 url 而不仅仅是租户 ID。

【问题讨论】:

    标签: azure azure-active-directory msal msal.js passport-azure-ad


    【解决方案1】:

    在 API 服务中,验证器在库源文件中定义,例如 Microsoft.IdentityModel.Tokens/Validators.cs。它根据令牌验证参数(Issuer、ValidateIssuer、签名等)验证令牌。

    颁发者包含带有v1.0v2.0 端点的实际租户的URL。 令牌始终需要与请求它们的端点相匹配,并且令牌始终与您的客户端将使用该令牌调用的 Web API 所期望的格式相匹配。

    为什么您需要验证颁发者,因为许多服务可以生成令牌,但您只想信任某些来源。

    如果我们离开 ValidateIssuer,则中间件将不会尝试验证颁发者租户,这实际上意味着您的应用程序对任何拥有 Azure AD 用户的人开放。

    有关token validation的更多信息,请参阅文档Validateissuerissuer

    【讨论】:

    • 我明白了,但我的问题是,当我们只关心租户时,为什么要验证整个 URL(租户 + 版本)?
    • 在一个租户中会注册多个应用程序,它可能会返回不同的令牌版本。为了匹配令牌接受的版本,我们需要指定端点版本。新创建的应用程序接受 v2.0 端点。您可以在应用清单中检查/更新accessTokenAcceptedVersion。请查看document中的重要说明
    猜你喜欢
    • 1970-01-01
    • 2021-08-05
    • 2019-07-31
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2022-11-01
    相关资源
    最近更新 更多