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
相关产品推荐
相关产品推荐

