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

Azure AD B2C JWT签名验证失败问题排查请求

排查Azure AD B2C JWT签名验证失败问题

我来帮你搞定这个签名验证失败的问题,这类问题大多卡在配置细节或者令牌属性不匹配上,咱们一步步来梳理:

1. 补全并核对Authority配置的正确性

你代码里的Authority写到一半了,完整的Azure AD B2C Authority格式应该是这样的:

jwtOptions.Authority = $"https://login.microsoftonline.com/tfp/{tenant}/{policy}/v2.0/";

或者现在更推荐的新域名格式:

jwtOptions.Authority = $"https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0/";

如果漏掉了/v2.0/这个路径,WebAPI会找不到正确的签名密钥端点,直接导致验证失败。

2. 核对令牌的Issuer(签发者)与配置是否匹配

把你的JWT令牌拿到jwt.io上解码(本地打开工具即可,无需跳转外部网站),查看iss字段的值,然后和你配置的Authority拼接后的Issuer完全对比——包括域名、租户名、策略名、路径,大小写都不能错。比如租户是contoso.onmicrosoft.com,策略是B2C_1_signupsignin,那Issuer应该是https://login.microsoftonline.com/tfp/contoso.onmicrosoft.com/B2C_1_signupsignin/v2.0/,必须完全一致。

3. 确认签名密钥能正常获取

AddJwtBearer会自动从Authority的/.well-known/openid-configuration/jwks端点拉取签名密钥。你可以手动访问这个端点(把完整Authority后面加上/.well-known/openid-configuration/jwks),看看能不能返回有效的JWKS(JSON格式的密钥集合数据)。如果访问失败,要么是Authority配置错误,要么是网络问题导致WebAPI拉不到密钥。

4. 检查令牌的签名算法是否被支持

解码令牌看alg字段,Azure AD B2C默认用的是RS256,WebAPI的AddJwtBearer默认支持这个算法,但如果你的令牌用了其他算法(虽然B2C一般不会这么配置),需要手动指定支持的算法:

jwtOptions.TokenValidationParameters = new TokenValidationParameters
{
    ValidAlgorithms = new[] { SecurityAlgorithms.RsaSha256 }
};

5. 确保ClientId是WebAPI的应用ID

这里要注意:配置里的clientId必须是你在Azure AD B2C里注册的WebAPI应用程序的ID,而不是前端客户端应用的ID。解码令牌看aud(受众)字段,这个值必须和配置里的ClientId完全匹配,否则验证会直接失败。

6. 检查令牌是否过期或被篡改

解码令牌看exp字段(过期时间,是Unix时间戳),确认当前时间在过期时间之前。另外,如果令牌被篡改过,签名验证肯定通不过,所以要确保令牌是从Azure AD B2C正常获取的,没有被修改过。

7. 开启详细日志抓取具体错误

如果上面的步骤都没问题,那就开启详细日志看具体报错。在你的appsettings.json里添加这段配置:

{
  "Logging": {
    "LogLevel": {
      "Microsoft.AspNetCore.Authentication": "Debug",
      "Microsoft.IdentityModel": "Debug"
    }
  }
}

然后运行WebAPI,查看日志里的认证相关错误信息——日志会明确告诉你是Issuer不匹配、Audience不对,还是密钥获取失败,直接定位问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:55:28