You need to enable JavaScript to run this app. .NET Core 3.1下Azure AD B2C的OBO流报AADST50013错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 3.1下Azure AD B2C的OBO流报AADST50013错误如何解决

排查AADSTS50013错误的可行方案

该错误核心是OBO请求中传入的用户断言(即前端传递给Web API 1的访问令牌)签名无法被Azure AD B2C验证,找不到对应签名公钥,可按以下顺序排查:

  • 首先修正Startup.cs的TokenValidationParameters配置:你当前直接new了一个TokenValidationParameters实例,覆盖了AddMicrosoftIdentityWebApi默认注入的B2C专属验证参数,会导致默认的发行人、受众验证规则失效,正确写法是直接修改现有参数:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddMicrosoftIdentityWebApi(options =>
            {
                Configuration.Bind("AzureAdB2C", options);
                // 不要new新的参数实例,直接修改现有实例的SaveSigninToken属性
                options.TokenValidationParameters.SaveSigninToken = true;
            }, options => { Configuration.Bind("AzureAdB2C", options); });
  • 检查构造ConfidentialClientApplication时的授权地址(authority)是否符合B2C规范:B2C的OBO流授权地址必须携带用户流/自定义策略名称,格式为https://<你的B2C租户域名>.b2clogin.com/<你的B2C租户域名>.onmicrosoft.com/<你使用的用户流名称>/v2.0/,不能使用普通Azure AD不带策略的授权地址,B2C的签名密钥和策略绑定,用错策略会找不到对应公钥。
  • 确认MSAL配置开启了B2C适配:构造ConfidentialClientApplication时要使用.WithB2CAuthority(authority)替代普通的.WithAuthority(authority),避免MSAL去普通Azure AD的公钥端点拉取密钥。
  • 验证传入的用户断言有效性:将bootstrapContext输出后粘贴到JWT解析工具中校验以下字段:
    • aud字段必须是Web API 1的客户端ID或应用ID URI
    • iss字段必须和你构造的authority对应的发行人地址完全一致
    • 令牌没有过期
  • 检查申请的scope格式是否正确:OBO流请求的scope必须是Web API 2暴露的完整scope路径,格式为https://<你的B2C租户域名>.onmicrosoft.com/<Web API 2的应用ID>/<scope名称>,不能直接使用短名称。
  • 检查Web API 1的应用注册清单配置:确认accessTokenAcceptedVersion属性设置为2,和B2C v2端点签发的令牌版本匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 17:24:01