You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core Blazor Server 仅允许两个指定Azure AD租户登录配置问题

正确配置多租户白名单校验方法

配置不生效原因

你当前手动配置OpenIdConnectOptions的执行时机早于AddMicrosoftIdentityWebApp内部的配置逻辑,导致你自定义的TokenValidationParameters被默认配置覆盖,所以校验规则没有生效。


方案1:直接在身份注册逻辑中配置校验规则

将原身份注册代码替换为以下内容,直接在AddMicrosoftIdentityWebApp的委托中修改验证参数,不会被默认配置覆盖:

// 先读取配置中的允许租户ID列表,生成合法issuer列表
var allowedTenantIds = Configuration["AllowedIssuers"].Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
var validIssuers = allowedTenantIds.Select(tenantId => $"https://login.microsoftonline.com/{tenantId}/v2.0").ToList();

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        // 绑定原有AzureAd配置
        Configuration.Bind("AzureAd", options);
        // 配置签发方校验规则
        options.TokenValidationParameters.ValidateIssuer = true;
        options.TokenValidationParameters.ValidIssuers = validIssuers;
    });

方案2:新增授权策略做双重校验

为了避免端点版本不一致导致的issuer校验失效,可以额外增加全局授权策略,作为第二道校验:

services.AddAuthorization(options =>
{
    options.AddPolicy("OnlyAllowedTenants", policy =>
    {
        policy.RequireAssertion(context =>
        {
            var userIssuer = context.User.FindFirst("iss")?.Value;
            return !string.IsNullOrEmpty(userIssuer) && validIssuers.Contains(userIssuer);
        });
    });
});

// 全局应用授权策略,所有页面都需要符合规则
services.AddControllersWithViews(options =>
{
    options.Filters.Add(new AuthorizeFilter("OnlyAllowedTenants"));
});
services.AddRazorPages();

注意事项

  • 确保你配置的ValidIssuers格式和用户ID Token中返回的iss claim完全一致,如果你的应用使用的是Azure AD v1授权端点,issuer格式不需要带/v2.0后缀。
  • 租户ID不要填写错误,和AllowedIssuers中配置的租户ID一一对应。

内容的提问来源于stack exchange,提问作者RannyMeier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:39:04