Azure B2C 部署后API校验token返回401 Unauthorized签名无效问题
问题根因
你遇到的401签名无效是因为Azure B2C的v1.0和v2.0端点签发的token签名公钥、issuer格式完全不同,本地调试时默认两边都用v1.0所以能跑通,线上API自动适配了v2.0校验规则导致校验不通过。配置v2.0后报IDX20807是因为默认库拼接自定义域名的OpenID元数据地址错误,无法拉取公钥配置。
解决方案
1. 配置Web应用端v2.0端点
修改Web应用的appsettings.json,在AzureAdB2C节点新增两个配置:
"AzureAdB2C": { // 原有配置全部保留,新增以下两项 "Authority": "https://login.myapp.net/你的B2C租户ID/B2C_1_SignUpIn/v2.0/", "EndpointMetadataAddress": "https://login.myapp.net/你的B2C租户ID/B2C_1_SignUpIn/v2.0/.well-known/openid-configuration" }
注意将你的B2C租户ID替换为实际的B2C租户ID或租户域名(格式如xxx.onmicrosoft.com)
2. 调整Web应用的OpenID连接配置
修改Web应用Startup.cs中的OpenIdConnectOptions配置,指定元数据地址和issuer校验规则:
services.Configure<OpenIdConnectOptions>(OpenIdConnectDefaults.AuthenticationScheme, options => { options.ResponseType = "code"; options.SaveTokens = true; // 新增以下配置 options.Authority = Configuration["AzureAdB2C:Authority"]; options.MetadataAddress = Configuration["AzureAdB2C:EndpointMetadataAddress"]; options.TokenValidationParameters.ValidIssuers = new[] { "https://login.myapp.net/你的B2C租户ID/v2.0/", "https://myapp.b2clogin.com/你的B2C租户ID/v2.0/" }; });
3. 对齐Web API的校验配置
首先修改Web API的appsettings.json,在AzureAdB2C节点新增和Web应用完全相同的Authority、EndpointMetadataAddress配置。
再修改Web API的Startup.cs,调整JWT校验规则:
services.AddMicrosoftIdentityWebApiAuthentication(Configuration, Constants.AzureAdB2C); // 新增JWT校验配置 services.Configure<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme, options => { options.Authority = Configuration["AzureAdB2C:Authority"]; options.MetadataAddress = Configuration["AzureAdB2C:EndpointMetadataAddress"]; options.TokenValidationParameters.ValidAudience = "你的Web API客户端ID"; options.TokenValidationParameters.ValidIssuers = new[] { "https://login.myapp.net/你的B2C租户ID/v2.0/", "https://myapp.b2clogin.com/你的B2C租户ID/v2.0/" }; options.TokenValidationParameters.ValidateIssuer = true; });
4. 确认Front Door转发规则
确保login.myapp.net到myapp.b2clogin.com的转发规则保留完整原始请求路径,不要修改或截断.well-known开头的请求路径。
验证方式
配置完成后将获取到的access token粘贴到jwt.io解析,确认iss字段为v2.0格式(路径带/v2.0/),aud字段为你的Web API客户端ID,再请求线上API即可正常通过校验。
内容的提问来源于stack exchange,提问作者ataraxia
相关产品推荐
相关产品推荐

