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

ASP.NET Core控制器用Azure AD与Azure AD B2C授权后警告问题咨询

问题分析与解决方案

不建议直接忽略这些警告。虽然当前接口能正常响应,但该日志说明认证中间件在处理请求时,会尝试用错误的认证方案验证令牌,验证失败后才切换到正确的方案,这种"冗余验证"不仅会污染日志,还可能在后续功能扩展时引发未预期的认证问题。

问题根源

你配置了两个独立的认证方案:

  • 默认的Bearer方案对应Azure AD认证
  • B2CScheme对应Azure AD B2C认证

当请求B2C保护的接口时,认证中间件会遍历已注册的认证方案,先尝试用Bearer方案验证B2C令牌,由于Azure AD的合法签发者与B2C令牌的签发者不匹配,就会抛出IDX40001警告,之后才会用B2CScheme完成正确的验证,因此接口能正常工作但日志会出现错误信息。

解决方法

1. 明确每个认证方案的合法签发者(推荐)

通过配置每个认证方案的TokenValidationParameters.ValidIssuers,让中间件只验证对应签发者的令牌,避免交叉验证:

// 配置Azure AD的Bearer方案
services.AddMicrosoftIdentityWebApiAuthentication(this.Configuration)
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches()
    .Configure(options =>
    {
        // 替换为你的Azure AD租户签发者地址
        options.TokenValidationParameters.ValidIssuers = new[] { "https://login.microsoftonline.com/{你的AzureAD租户ID}/v2.0" };
    });

// 配置Azure AD B2C的B2CScheme方案
services.AddAuthentication()
    .AddMicrosoftIdentityWebApi(this.Configuration, "AzureAdB2C", "B2CScheme", true)
    .Configure(options =>
    {
        // 替换为你的B2C租户签发者地址
        options.TokenValidationParameters.ValidIssuers = new[] { "https://{你的B2C租户名称}.b2clogin.com/{你的B2C租户ID}/v2.0/" };
    });

2. 过滤冗余日志(临时方案)

如果暂时无法修改代码,可通过调整日志配置,将该类警告日志过滤掉,仅保留错误级别以上的日志:
在appsettings.json中添加日志过滤规则:

"Logging": {
    "LogLevel": {
        "Microsoft.IdentityModel.LoggingExtensions.IdentityLoggerAdapter": "Error"
    }
}

总结

优先选择第一种方法从根源解决问题,避免后续潜在的认证风险;第二种方法仅作为临时过渡方案,不建议长期使用。

内容的提问来源于stack exchange,提问作者Pat Long - Munkii Yebee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:20:59