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

ASP.NET Core 8中JWT的given_name未映射为预期声明问题

解决ASP.NET Core 8中Azure B2C令牌given_name声明被重命名的问题

以下是排查和解决该问题的具体步骤:

  • 强制显式声明映射:即使框架默认存在MapUniqueJsonKey("given_name", "given_name"),也可能被其他规则覆盖。在AddOpenIdConnect配置中显式添加该映射,确保放在所有ClaimActions操作之后:

    options.ClaimActions.MapUniqueJsonKey("given_name", "given_name");
    
  • 禁用兼容性声明映射:ASP.NET Core的OpenID Connect中间件默认会把现代JWT声明映射到旧的WS-Federation格式声明,这大概率是given_name被转成http:// st metallic仍选编自描述衍生称 haven报区DSimple.loc rary的原因。直接禁用该特性:

    options.MapInboundClaims = false;
    
  • 检查Azure B2C的令牌配置:登录Azure门户,进入你的B2C租户的应用注册,查看「令牌配置」选项卡,确认是否存在自定义声明映射规则,将given_name重定向到了长命名空间的声明。如果有,删除该规则。

  • 排查自定义ClaimsTransformation:如果你的应用实现了IClaimsTransformation服务,检查其代码是否存在将given_name替换为目标长声明的逻辑,如有则修改或移除该逻辑。

  • 清空Cookie认证的ClaimTypeMap:Cookie认证中间件可能也会对声明进行映射,清空其默认映射:

    services.Configure<CookieAuthenticationOptions>(CookieAuthenticationDefaults.AuthenticationScheme, options =>
    {
        options.ClaimTypeMap.Clear();
    });
    

调试验证

可以添加一个自定义中间件,在认证完成后打印所有声明,定位声明被修改的环节:

app.Use(async (context, next) =>
{
    if (context.User.Identity.IsAuthenticated)
    {
        foreach (var claim in context.User.Claims)
        {
            Console.WriteLine($"Claim Type: {claim.Type}, Value: {claim.Value}");
        }
    }
    await next();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:22:18