[英]ValidateIssuer option in OpenID connect authentication
我们正在使用 OIDC 库,目前我们只允许 MSA 帐户登录。 因此我们配置了参数ValidateIssuer = true
和Validissuers = 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 中拥有用户的人开放。
处理多租户案例的一些建议
如果您提前知道有效发行者列表,请使用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/" }
如果您的应用程序的有效颁发者是动态的,或者如果您想编写一些逻辑来收集该列表,您可以为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 };
如果这两种情况都没有意义,并且您的验证逻辑与调用者所属的租户无关,请将TokenValidationParameters.ValidateIssuer
设置为 false,但请确保在末尾添加自定义逻辑,例如在SecurityTokenValidated
通知中。
示例代码
使用 Azure AD 和 OpenID Connect 构建多租户 SaaS Web 应用程序
仔细查看此示例中的这些文件:
此标志允许 OpenID Connect 身份验证处理程序确保登录到您的应用程序的人来自已知的 AAD 租户。 如果将其设置为false
,则不会进行此验证。 它实际上意味着任何访问您的应用程序并在重定向到 AAD 时成功登录的人都将被允许进入您的应用程序。
总之,我想说只有两种情况你想将这个标志设置为false
是:
另外,我很想知道“应用程序已经由自定义授权备份”是什么意思。
干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.