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

ASP.NET Core 8 Web API多租户限制Issuer遇Bearer Scheme重复问题

解决ASP.NET Core 8中JWT Issuer限制与Bearer Scheme冲突问题

错误原因

你碰到的System.InvalidOperationException: Scheme already exists: Bearer错误,核心原因是AddJwtBearer和AddMicrosoftIdentityWebApi都默认使用Bearer作为认证Scheme,重复注册同一Scheme导致冲突。

正确配置方案

方案一:直接在Azure AD认证配置中设置Issuer限制

AddMicrosoftIdentityWebApi本身基于JwtBearer实现,不需要单独调用AddJwtBearer,直接通过它的配置委托设置令牌验证参数即可:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddAuthentication()
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"), options =>
    {
        options.TokenValidationParameters.ValidateIssuer = true;
        options.TokenValidationParameters.ValidIssuers = new[] { "XXX", "YYY" };
        // 如果需要保留Azure AD默认的租户Issuer,也可以合并进去
        // var defaultIssuer = $"https://login.microsoftonline.com/{builder.Configuration["AzureAd:TenantId"]}/v2.0";
        // options.TokenValidationParameters.ValidIssuers = new[] { defaultIssuer, "XXX", "YYY" };
    })
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();

方案二:多认证Scheme共存(如需同时支持自定义JWT和Azure AD)

如果你的API需要同时支持自定义JWT和Azure AD认证,给自定义JWT指定一个独立的Scheme名称即可避免冲突:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    // 自定义JWT使用独立Scheme
    .AddJwtBearer("CustomJwt", options =>
    {
        options.TokenValidationParameters.ValidateIssuer = true;
        options.TokenValidationParameters.ValidIssuers = new[] { "XXX", "YYY" };
    })
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();

这种情况下,需要在授权时指定允许的Scheme,比如在控制器上添加:

[Authorize(AuthenticationSchemes = "CustomJwt,Bearer")]

关于之前配置无效的说明

如果你之前尝试在AddMicrosoftIdentityWebApi中配置Issuer但没效果,大概率是配置顺序问题——Azure AD会自动填充TokenValidationParameters的部分默认值,确保你的配置是在这些默认值之后设置的(比如直接在AddMicrosoftIdentityWebApi的options委托中修改,而不是单独提取配置),这样才能覆盖默认参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 08:48:26