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

.NET 5 Web API遇Azure AD认证401,Bearer Token签名无效如何解决

解决方案

核心错误点及修复步骤

  • 配置节点不匹配+拼写错误
    appsettings.json中的配置节点名为AzureAd,但Startup.cs中读取的是AzureAdB2C前缀的配置项,导致Audience、Authority等核心验证参数全部读取错误,是签名验证失败的首要原因。另外配置中存在拼写错误TanantId,正确应为TenantId。
    修复操作:将Startup.cs中所有AzureAdB2C前缀的配置读取改为AzureAd,同时修正appsettings.json中的拼写错误。
  • Authority端点版本不匹配
    appsettings中配置的Issuer是v2.0端点(后缀带/v2.0),但Startup中拼接Authority时未添加该后缀,导致JWT发行方验证不通过。
    修复操作:修改Authority拼接逻辑:
    jwtConfig.Authority = $"{configuration["AzureAd:Instance"]}{configuration["AzureAd:TenantId"]}/v2.0";
    
  • 验证参数缺失
    当前TokenValidationParameters未指定ValidIssuer,会导致发行方验证失败。
    修复操作:在TokenValidationParameters配置中补充:
    ValidIssuer = configuration["AzureAd:Issuer"]
    
  • Angular端Token获取校验
    1. 确认请求token时使用的scope是Web API暴露的scope(格式为api://<Web API ClientId>/<ScopeName>,即你配置截图中对应的scope值),不要使用Microsoft Graph的scope(如User.Read),否则获取到的是Graph的访问令牌,无法通过自有API的签名验证。
    2. 确认传递的this.token是调用acquireTokenSilent/acquireTokenPopup获取到的accessToken,不是idToken,idToken仅用于前端身份验证,不能用于调用后端API。

修改后核心代码参考

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(jwtConfig =>
    {
        jwtConfig.Audience = configuration["AzureAd:ResourceId"];
        jwtConfig.Authority = $"{configuration["AzureAd:Instance"]}{configuration["AzureAd:TenantId"]}/v2.0";
        jwtConfig.SaveToken = true;
        jwtConfig.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidAudience = jwtConfig.Audience,
            ValidIssuer = configuration["AzureAd:Issuer"]
        };
        // 其余Events配置保持不变
    });

内容的提问来源于stack exchange,提问作者K.Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:45:02