Azure B2C内置流程ID令牌缺失邮箱字段问题排查求助
解决Azure B2C从外部AD获取不到邮箱的问题
先检查外部AD(AD_2)的应用注册配置
- API权限配置:
- 进入AD_2的应用注册,切换到「API权限」页,添加Microsoft Graph的
User.Read委派权限(必须是委派权限,而非应用权限)。 - 点击「授予管理员同意」,确保权限生效——未完成此步骤的话,用户登录时无法获取邮箱相关声明。
- 进入AD_2的应用注册,切换到「API权限」页,添加Microsoft Graph的
- 令牌配置:
在应用注册的「令牌配置」页,点击「添加可选声明」,选择ID令牌,勾选email选项并保存。这一步是强制AD_2的ID令牌主动返回邮箱字段。 - 用户属性验证:
确认AD_2中测试的用户账号本身已配置邮箱属性,部分内部账号可能未设置邮箱,导致无法返回对应字段。
再检查Azure B2C的自定义OpenID提供商配置
- 范围设置:
在自定义IDP的配置页,确保「范围」字段包含openid email profile,而非仅openid。缺少email范围的话,AD_2不会返回邮箱声明。 - 声明映射:
进入自定义IDP的「声明映射」设置,将IDP返回的邮箱字段(需先确认AD_2实际返回的声明键,可能是email或mail,可通过JWT解码工具查看AD_2的ID令牌)映射到B2C的email声明。
最后检查B2C用户流(SignUp_SignIn)的配置
- 声明与属性:
- 在用户流的「用户属性」页,确认已勾选「Email Address」作为要收集或返回的属性。
- 在「应用程序声明」页,确保「Email Address」已被勾选,这样B2C才会把邮箱包含在最终返回给应用的令牌里。
- 身份提供商声明映射:
在用户流的「身份提供商」设置里,找到你的自定义OpenID提供商,检查是否已将IDP的邮箱声明映射到B2C的email用户属性。
调试验证步骤
用浏览器开发者工具(F12)监控登录流程:
- 触发登录后,查看AD_2授权回调的请求,获取返回的ID令牌。
- 用JWT解码工具解析该令牌,确认里面是否包含邮箱字段:
- 若令牌里无邮箱:回到AD_2的配置检查权限和令牌声明。
- 若令牌里有邮箱但B2C返回的令牌没有:检查B2C的声明映射和用户流配置。
内容的提问来源于stack exchange,提问作者Anton Putau
相关产品推荐
相关产品推荐

