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

.NET 7多认证提供者:本地JWT验证通过后跳过Azure AD验证

解决方案

1. 配置组合认证策略实现短路逻辑

创建一个组合认证方案作为默认认证方式,让系统优先验证LocalJWT,验证成功则终止后续认证流程;仅当LocalJWT验证失败时,才尝试Azure AD认证。这样既满足“本地JWT通过后不触发Azure AD验证”的需求,又能避免启动时加载Azure AD元数据。

在Program.cs中添加以下配置:

// 配置LocalJWT认证方案
builder.Services.AddAuthentication("CombinedAuth")
    .AddJwtBearer("LocalJWT", options =>
    {
        // 填入你的LocalJWT验证参数
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = builder.Configuration["Jwt:Issuer"],
            ValidateAudience = true,
            ValidAudience = builder.Configuration["Jwt:Audience"],
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"]))
        };
    })
    // 配置Azure AD认证方案
    .AddMicrosoftIdentityWebApi("AzureAD", builder.Configuration, "AzureAd")
    // 添加组合策略方案
    .AddPolicyScheme("CombinedAuth", "Combined Authentication", options =>
    {
        options.ForwardDefaultSelector = async context =>
        {
            // 先尝试LocalJWT认证
            var localAuthResult = await context.HttpContext.AuthenticateAsync("LocalJWT");
            if (localAuthResult.Succeeded)
            {
                // LocalJWT验证成功,直接使用该方案,终止后续流程
                return "LocalJWT";
            }
            // LocalJWT验证失败,尝试Azure AD认证
            return "AzureAD";
        };
    });

2. 禁用Azure AD启动时的元数据加载

为彻底解决启动时的元数据获取错误,修改Azure AD的JWT Bearer选项,让其仅在被实际调用时才加载元数据,并针对开发环境做特殊配置:

// 调整Azure AD认证选项
builder.Services.PostConfigure<JwtBearerOptions>("AzureAD", options =>
{
    // 开发环境禁用HTTPS元数据要求(生产环境需改回true)
    if (builder.Environment.IsDevelopment())
    {
        options.RequireHttpsMetadata = false;
    }
    // 延长元数据自动刷新间隔,避免启动时立即请求远程地址
    options.AutomaticRefreshInterval = TimeSpan.FromDays(7);
});

3. 配置授权策略

确保授权策略使用默认的组合认证方案,无需额外指定两种方案:

builder.Services.AddAuthorization(options =>
{
    options.DefaultPolicy = new AuthorizationPolicyBuilder()
        .RequireAuthenticatedUser()
        .Build();
});

额外说明

  • 开发环境下,只要请求携带有效的LocalJWT,就不会触发Azure AD的验证逻辑,自然不会出现元数据获取错误。
  • 生产环境补全Azure AD租户ID、客户端ID等配置后,元数据加载会自动恢复正常,不影响功能使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:37:43