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

ASP.NET Core 2.0 Azure AD Bearer JWT签名验证失败求助

问题诊断与解决方案

从你提供的信息来看,导致401未授权(IDX10503签名验证失败)的核心问题有几个,我逐一拆解并给出修复方案:

1. Token的受众(aud)完全不匹配

先看你拿到的JWT Payload里的aud字段:

"aud": "00000003-0000-0000-c000-000000000000"

这个值是Microsoft Graph的默认客户端ID,而不是你的Web API的ClientID(f5afed6b-e09c-4c7d-90cc-222222222222)。Web API验证Token时,会强制检查aud是否匹配自身的ClientID,不匹配就会直接返回401。

修复方法:

Web-UI在获取Token时,必须指定你的Web API专属的权限/范围,而不是Microsoft Graph的。比如:

  • 如果你的Web API定义了自定义scope,就用api://{WebAPI-ClientId}/your-custom-scope格式的scope
  • 若暂时没定义自定义scope,也可以直接用Web API的ClientID作为scope(适用于默认的应用级权限)

2. Web API的配置节点与参数错误

你的Web API用了AzureAdB2C配置节点,但从上下文看,你使用的是普通Azure AD(不是Azure AD B2C),而且配置参数完全不符合要求:

  • Instance设为https://login.microsoftonline.com/common,但你的租户ID是99c7da52-56fc-49ca-aa95-111111111111,应该指向具体租户的端点
  • Domain字段对于普通Azure AD来说是冗余的,应该替换为TenantId
  • 配置节点名称建议改成AzureAd,避免和B2C配置混淆

修正后的Web API配置:

"AzureAd": {
  "Instance": "https://login.microsoftonline.com/",
  "TenantId": "99c7da52-56fc-49ca-aa95-111111111111",
  "ClientId": "f5afed6b-e09c-4c7d-90cc-222222222222"
}

3. Web API Startup的身份验证配置错误

你当前用AddAzureAdBearer绑定了错误的AzureAdB2C节点,而且对于普通Azure AD场景,手动配置JwtBearer参数会更直观、不易出错。

修正后的Startup代码:

public class Startup {
    public Startup(IConfiguration configuration) { Configuration = configuration; }
    public IConfiguration Configuration { get; }
    public void ConfigureServices(IServiceCollection services) {
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options => {
                options.Authority = $"{Configuration["AzureAd:Instance"]}{Configuration["AzureAd:TenantId"]}";
                options.Audience = Configuration["AzureAd:ClientId"];
                options.TokenValidationParameters = new TokenValidationParameters {
                    ValidateIssuer = true,
                    ValidIssuer = $"{Configuration["AzureAd:Instance"]}{Configuration["AzureAd:TenantId"]}/",
                    ValidateAudience = true,
                    ValidAudience = Configuration["AzureAd:ClientId"],
                    ValidateLifetime = true
                };
            });
        services.AddMvc();
    }
    public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
        if (env.IsDevelopment()) app.UseDeveloperExceptionPage();
        app.UseAuthentication();
        app.UseMvc();
    }
}

额外检查点

  • 确认Web API的Azure AD注册中,已经将Web-UI的应用添加为授权客户端,并且授予了对应的权限
  • 确认Web-UI获取Token时,请求的scope是正确的(比如api://f5afed6b-e09c-4c7d-90cc-222222222222/access_as_user)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:47:07