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

