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

Azure B2C能否通过声明发送用户主体名称(UPN)并获取用户唯一用户名

最优实现方案:配置B2C用户流返回UPN声明

该方案操作成本最低,无需修改现有注册流程,也不存在唯一性校验的额外开发量,是首选方案:

  • 进入Azure B2C管理界面,打开你正在使用的注册/登录用户流配置页
  • 左侧导航选择「应用程序声明」选项
  • 在声明列表中勾选用户主体名称(User Principal Name),保存配置后等待1~2分钟生效
  • 如果你使用的是自定义策略(IEF),直接在对应依赖方配置的输出声明节点中添加<OutputClaim ClaimTypeReferenceId="upn" PartnerClaimType="upn" />即可

Blazor端获取UPN的代码示例:

// 注入AuthenticationStateProvider后调用
var authState = await _authStateProvider.GetAuthenticationStateAsync();
var userClaims = authState.User.Claims;
// 默认UPN的声明类型为固定值
var userName = userClaims.FirstOrDefault(c => c.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn")?.Value;
其他方案适用场景&实现说明

1. 账户创建时将UPN设置为显示名称

仅适合业务上要求显示名称与UPN完全一致的场景,灵活性较低:

  • 内置用户流:在注册页面配置中隐藏显示名称输入项,设置默认值为用户主体名称即可
  • 自定义策略:在用户创建的技术配置文件中添加声明转换规则,将upn的值直接赋值给displayName属性

2. 强制显示名称唯一

不推荐,开发成本最高:内置用户流不支持该能力,必须通过自定义策略实现,需要额外开发调用Microsoft Graph校验显示名称是否重复的逻辑,还要配套注册页的错误提示逻辑,工作量是首选方案的数倍。

3. 调用Microsoft Graph查询用户属性

适合需要同时获取UPN之外其他用户属性的场景:

  • 用登录后默认返回的用户objectId声明作为参数,调用Graph API的GET /users/{objectId}接口即可获取包括UPN在内的全量用户属性
  • 需要给应用配置Microsoft Graph的User.Read权限,会多一次API调用开销,性能弱于直接从令牌中取声明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:48:02