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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:57:04