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

Azure B2C调用受保护接口返回Bearer invalid_token签名无效问题求助

问题排查与解决步骤

核心错误点为JWT验证配置与实际返回的令牌属性不匹配,按以下顺序修正即可:

1. 修正发行人(Issuer)配置

你当前代码里ValidIssuer存在两个明显错误:

  • 填写了错误的双https://前缀:硬编码值为https://https://
  • 配置值和JWT令牌中实际返回的iss完全不匹配,JWT中实际iss值为https://carehomebookingtest.b2clogin.com/d452b############-e150f022535e/v2.0/

同时注意Azure B2C的Authority需要绑定对应用户流才能拉取到正确的签名公钥,修正后配置如下:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(opt =>
    {
        opt.Audience = Configuration["AzureAd:ResourceId"];
        // Authority带上你使用的用户流B2C_1_SignUpIn,用于自动拉取签名公钥
        opt.Authority = "https://carehomebookingtest.b2clogin.com/d452b############-e150f022535e/B2C_1_SignUpIn/v2.0/";
        opt.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            // 替换为JWT解码后实际得到的iss值
            ValidIssuer = "https://carehomebookingtest.b2clogin.com/d452b############-e150f022535e/v2.0/",
            // 开启签名公钥验证,中间件会自动从B2C元数据端点拉取公钥
            ValidateIssuerSigningKey = true
        };
    });

2. 验证受众(Audience)配置

确认你的配置文件中AzureAd:ResourceId的值,和JWT解码后aud字段的值e72a######################完全一致,无拼写、多字符/少字符错误。

3. 兜底排查方案

如果修正以上配置后仍报错,可添加验证失败日志定位具体原因:

opt.Events = new JwtBearerEvents
{
    OnAuthenticationFailed = context =>
    {
        // 控制台输出详细的验证失败原因,可快速定位是签名/有效期/受众/发行人哪一项验证失败
        Console.WriteLine($"JWT验证失败原因:{context.Exception.Message}");
        return Task.CompletedTask;
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:27:03