Azure B2C用户流中@xxx.onmicrosoft.com账号Email声明缺失求助
问题原因及解决办法
核心原因
- 你的
@xxx.onmicrosoft.com账号属于B2C内置租户账号:首次登录是交互式登录,B2C会从目录中完整拉取包括email在内的用户属性并传给API连接器;但关闭应用重新打开时触发的是静默SSO登录,B2C默认不会在静默请求中主动拉取所有声明,仅返回会话缓存中已有的内容,而你没配置强制返回email声明,导致API连接器拿不到。 - 你在用户流中勾选了Email Addresses应用声明,但未设置为始终返回此声明,B2C在SSO场景下会省略这类非强制声明;外部第三方IDP账号不存在这个问题,因为它们的email由身份提供者每次登录时主动返回,B2C会直接传递。
解决步骤
- 修改用户流的应用声明配置:
进入注册登录用户流的“应用声明”页面,找到Email Addresses声明,点击编辑,勾选“始终返回此声明”选项,确保B2C在任何登录场景(包括SSO)中都会把email加入到传给API连接器的payload里。 - 检查会话管理设置:
在用户流的“会话管理”中,确认“SSO会话状态”设为“使用现有会话”时,是否开启了“强制获取声明”选项,开启后可强制B2C每次都从目录拉取最新的用户属性。 - 验证API连接器触发逻辑:
查看B2CRoleAssignmentAzure Function的运行日志,确认静默登录场景下是否有请求进入,以及请求中包含的属性字段,排查预览版API连接器对SSO请求的处理差异。
内容的提问来源于stack exchange,提问作者OverflowStack
相关产品推荐
相关产品推荐

