【问题标题】:ValidateIssuer option in OpenID connect authenticationOpenID 连接身份验证中的 ValidateIssuer 选项
【发布时间】:2019-09-10 01:46:09
【问题描述】:

我们正在使用 OIDC 库,目前我们只允许 MSA 帐户登录。所以我们已经配置了参数ValidateIssuer = trueValidissuers = https://login.microsoftonline.com/..” 但是,我们现在需要将其他AAD 租户(例如:abc@dell.com)加入我们的应用程序,所以我们决定设置ValidateIssuer = false

由于我的应用程序已经由自定义授权备份,我发现很难完全理解此标志的用途。 基本上我的问题是在什么情况下不想将此标志设置为 false ?如果设置为 false 可能会遇到什么风险?

我查看了 here 发布的 AAD 文档,但仍然无法从 cmets 对示例代码 sn-p 找到令人信服的回应:

        // ValidateIssuer set to false to allow work accounts from any organization to sign in to your application
        // To only allow users from a single organizations, set ValidateIssuer to true and 'tenant' setting in web.config to the tenant name or Id (example: contoso.onmicrosoft.com)
        // To allow users from only a list of specific organizations, set ValidateIssuer to true and use ValidIssuers parameter
        TokenValidationParameters = new TokenValidationParameters()
        {
            ValidateIssuer = false
        },

【问题讨论】:

    标签: c# azure-active-directory openid-connect


    【解决方案1】:

    正如已经提到的另一个答案,如果您离开 ValidateIssuer = false,则 OIDC 中间件将不会尝试验证颁发者租户,这实际上意味着您的应用程序对任何拥有 Azure AD 用户的人开放。

    处理多租户案例的一些建议

    1. 如果您提前知道有效发行者列表,请使用TokenValidationParameters.ValidIssuers 中的发行者列表。 示例:

        ValidIssuers = new List<string>()
        {
            "https://sts.windows.net/6d9c0c36-c30e-442b-b60a-ca22d8994d14/",
            "https://sts.windows.net/f69b5f46-9a0d-4a5c-9e25-54e42bbbd4c3/",
            "https://sts.windows.net/fb674642-8965-493d-beee-2703caa74f9a/"
        }
      
    2. 如果您的应用程序的有效颁发者是动态的,或者如果您想编写一些逻辑来收集该列表,您可以为 TokenValidationParameters.IssuerValidator 编写一个具有您自定义逻辑的实现。您只需要设置一个将用于验证颁发者的委托。

          TokenValidationParameters validationParameters = new TokenValidationParameters
          {            
              ValidateIssuer = true,
      
              // Set this to a delegate and write your own custom implementation there. See code sample URL ahead for more details.
              IssuerValidator = AadIssuerValidator.ValidateAadIssuer
          };
      
    3. 1234563通知。

    示例代码

    Build a multi-tenant SaaS web application using Azure AD & OpenID Connect

    仔细查看此示例中的这些文件:

    【讨论】:

      【解决方案2】:

      此标志允许 OpenID Connect 身份验证处理程序确保登录到您的应用程序的人来自已知的 AAD 租户。如果将其设置为false,则不会发生此验证。它实际上意味着任何访问您的应用程序并在被重定向到 AAD 时成功登录的人都将被允许进入您的应用程序。

      总之,我想说你想将此标志设置为false 的唯一两种情况是:

      • 您事先不知道哪些租户可以连接到您的应用程序;或
      • 您希望允许来自每个 AAD 租户的人员连接到您的应用程序。

      另外,我很想知道您所说的“应用程序已由自定义授权备份”是什么意思。

      干杯

      【讨论】:

      • 感谢米凯尔!!我认为我的问题的基础是 - 将其设置为 false 是否存在任何安全风险。如果不是,那么我仍然不明白为什么我要明确地将其设为真实。会不会有安全隐患?我提到了应用程序已经由自定义授权备份,因为我从安全角度很难猜测这个标志的重要性,并且觉得如果我的应用程序在 AAD 身份验证后已经有自定义授权,那么仍然没有任何租户可以简单地访问我的应用程序。
      • 那么风险是来自您不应该允许登录的租户的某人可以登录。我知道您说您有一些逻辑来确保您不允许任何租户访问应用程序。我的观点是,在安全性方面,我宁愿使用内置的东西,也不愿自己动手。将其设置为 true 并将授权租户添加到 ValidIssuers 属性是一种内置机制,可以控制哪些租户可以登录。
      猜你喜欢
      • 2019-04-24
      • 2015-03-11
      • 2021-04-02
      • 1970-01-01
      • 2010-09-06
      • 2018-06-25
      • 1970-01-01
      • 2021-09-07
      • 2014-04-30
      相关资源
      最近更新 更多