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

B2C OpenId Connect JWT令牌在ASP.NET Core API中验证失败求助

问题诊断与解决方案

1. 核心错误:使用了错误的令牌进行验证

你当前发送的idp_access_token是B2C转发的上游身份提供商(示例中为Azure AD)的令牌,仅用于调用上游IDP的API,并非给你的自定义API做身份验证用的。你需要使用B2C自身颁发的Access Token(而非ID Token或idp_access_token)来调用API。

2. 修正ASP.NET Core API的身份验证配置

你当前使用的AddMicrosoftIdentityWebApp是为Web App(前端后端同构场景)设计的,独立API场景应使用AddMicrosoftIdentityWebApi:

正确的Program.cs代码

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration, "AzureAdB2C");

对应的appsettings.json配置示例

"AzureAdB2C": {
    "Instance": "https://your-tenant-name.b2clogin.com/",
    "ClientId": "你的API应用注册ClientId",
    "Domain": "your-tenant-name.onmicrosoft.com",
    "SignUpSignInPolicyId": "B2C_1_susi",
    "TenantId": "你的B2C租户GUID"
}

3. 验证时需关注的关键Claims

令牌必须满足以下核心验证条件,否则会验证失败:

  • aud(受众):必须严格匹配你的API应用注册的ClientId
  • iss(颁发者):格式应为https://{你的租户名}.b2clogin.com/{租户GUID}/v2.0/,需与配置中的Instance、TenantId组合一致
  • exp(过期时间):令牌未超过有效期
  • tfp(用户流):必须匹配你使用的B2C用户流(示例中为B2C_1_susi)

4. 调试建议

  • 用JWT解析工具(离线工具或代码解码)检查你发送的令牌的aud和iss是否与配置完全一致
  • 开启身份验证调试日志,查看具体失败原因:
"Logging": {
    "LogLevel": {
        "Microsoft.AspNetCore.Authentication": "Debug"
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:35:24