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

AD B2C对接OIDC联邦外部IdP时无法获取email声明

问题根因

email声明无法获取由三个配置错误共同导致:

  • 联邦IdP侧应用权限配置不全。当前联邦B2C租户的应用注册仅授予了openid、offline_access两个委托权限,未授予email、profile权限,哪怕宿主B2C请求scope里写了这两个参数,IdP也不会签发对应权限覆盖的声明。
  • 宿主B2C配置文件内email声明映射规则缺失。你贴的配置里<OutputClaim ClaimTypeReferenceId="email" />没有指定PartnerClaimType属性,默认只会匹配IdP返回的、名称完全等于email的声明,只要IdP返回的邮箱字段名有差异(比如部分B2C配置返回emails数组、或者用upn字段存邮箱值)就会映射失败。另外你配置的federatedIDPEmailAddress虽然写了PartnerClaimType为email,但因为IdP本身没返回email字段,所以会一直取默认值"Not Set"。
  • 联邦IdP侧的登录流程未配置声明返回规则。就算应用权限配全了,如果联邦B2C签发令牌的用户流/自定义策略没有勾选把邮箱地址加入返回声明,最终返回的id_token里也不会带email字段。
解决步骤

按顺序操作即可修复:

  1. 补全联邦B2C侧的应用注册权限
    • 进入联邦B2C租户的应用注册页,找到给宿主B2C对接用的应用
    • 打开「API权限」页,点击「添加权限」,选择Microsoft Graph-委托权限,勾选email、profile、openid、offline_access四个权限,保存后点击「授予管理员同意」完成授权。注意不要选应用程序权限,必须选委托权限,否则普通用户登录时不生效。
  2. 配置联邦B2C侧登录流程的声明返回
    • 找到联邦B2C当前用于联邦登录的用户流或自定义策略
    • 打开「应用程序声明」配置页,勾选「电子邮件地址」选项后保存。如果联邦B2C用本地账号登录,且用户邮箱存在身份验证联系方式中,要确认配置返回的是email声明,不是其他别名字段。
  3. 修正宿主B2C base.xml里的声明映射
    • 找到贴出的TechnicalProfile下的OutputClaims节点,把原来的<OutputClaim ClaimTypeReferenceId="email" />替换为显式映射配置,避免字段名不匹配问题:
    <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" DefaultValue="" />
    
    • 如果改完测试还是拿不到值,可以把返回的id_token解码查看实际返回的字段名,把PartnerClaimType改成对应字段即可。比如部分老版本B2C配置会把邮箱存在emails数组里,这时候PartnerClaimType要写成emails[0]。
  4. 配置验证
    • 清除浏览器之前留存的联邦登录会话缓存,重新走登录流程测试,此时email、givenName、surname字段均可正常填充。

补充:如果联邦B2C本身用社交账号(比如谷歌、其他第三方IdP)作为登录源,要先确认联邦B2C已经从这些上游IdP拿到了邮箱声明,否则就算配置了返回规则,email值也会为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:15:47