繁体   English   中英

OpenID 连接身份验证中的 ValidateIssuer 选项

[英]ValidateIssuer option in OpenID connect authentication

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

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

我查看了此处发布的 AAD 文档,但仍然无法从示例代码片段的评论中找到令人信服的回应:

        // 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
        },

正如另一个答案已经提到的那样,如果您离开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. 如果这两种情况都没有意义,并且您的验证逻辑与调用者所属的租户无关,请将TokenValidationParameters.ValidateIssuer设置为 false,但请确保在末尾添加自定义逻辑,例如在SecurityTokenValidated通知中。

示例代码

使用 Azure AD 和 OpenID Connect 构建多租户 SaaS Web 应用程序

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

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

总之,我想说只有两种情况你想将这个标志设置为false是:

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

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

干杯

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM