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

ASP.NET Core 7.0集成Azure AD B2C后无法获取额外应用声明怎么办?

解决Azure AD B2C额外应用声明未出现在认证主体中的问题

1. 确认Azure AD B2C策略的声明配置

  • 若使用用户流:
    • 登录Azure AD B2C门户,打开你的注册登录流(如B2C_1_susi)
    • 进入「用户属性」页面,确认你添加的额外属性已勾选「收集」和「返回」选项
    • 进入「应用程序声明」页面,确保需要的额外声明已添加并启用
  • 若使用自定义策略:
    • 检查RelyingParty节点的OutputClaims,确保包含你的额外声明,示例:
      <OutputClaim ClaimTypeReferenceId="extension_CustomAttribute" />
      
    • 同时确认对应的ClaimType已在策略中定义,且在用户旅程中完成了收集或读取逻辑

2. 调整OpenID Connect配置以获取声明

修改Program.cs中的认证配置,开启UserInfo端点获取声明,并添加必要的声明映射:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        builder.Configuration.Bind("AzureAdB2C", options);
        // 开启从UserInfo端点拉取扩展属性声明
        options.GetClaimsFromUserInfoEndpoint = true;
        // 若需请求自定义API的权限范围,添加对应Scope
        options.Scope.Add("https://myb2c.onmicrosoft.com/api/your_custom_scope");
        // 映射B2C返回的自定义声明到ClaimsPrincipal
        options.ClaimActions.MapJsonKey("extension_CustomAttribute", "extension_CustomAttribute");
    });

3. 验证应用权限(针对自定义API声明)

如果额外声明来自自定义API:

  • 在Azure AD B2C中为你的Web应用授予该API的相应权限
  • 确保配置的Scope列表中包含该API的权限范围(如上述代码示例)

4. 调试验证声明

  • 在控制器中直接输出当前用户的所有声明,确认是否已获取:
    public IActionResult Index()
    {
        var userClaims = User.Claims.Select(c => new { 声明类型 = c.Type, 声明值 = c.Value });
        return View(userClaims);
    }
    
  • 解码ID Token(可本地使用jwt.io工具),检查Token本身是否包含目标声明:
    • 如果Token里没有,说明B2C策略配置存在问题
    • 如果Token里有但ClaimsPrincipal中没有,说明缺少声明映射配置

5. 注意自定义声明的前缀

Azure AD B2C的自定义属性声明默认带有extension_前缀,例如你创建的CustomAttribute,在返回的Token中会显示为extension_CustomAttribute,映射时必须使用完整名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:25:12