Azure SSO OIDC ID_Token中email显示has email protected的原因排查
检查用户邮箱属性状态
先确认Azure AD里这些用户的邮箱字段是不是被标记成了"受保护"。有些场景下,用户邮箱会因为隐私设置、合规要求或者内部管理员策略被隐藏/保护,这时候OIDC就会返回这个占位符值。可以直接在Azure AD门户的用户详情页看邮箱属性,也能用Get-AzureADUserPowerShell命令查UserPrincipalName和Mail字段的配置。验证应用权限配置
确认OIDC应用有没有拿到读取用户邮箱的正确权限。得确保应用有User.Read或者User.ReadBasic.All这类能读取用户基本资料的权限,而且权限已经过管理员同意。要是权限不够,Azure AD就会返回受保护的占位符,不会给真实邮箱值。排查用户身份源类型
如果这些用户是从外部身份源(比如AD FS、第三方IDP)同步或联合到Azure AD的,得检查身份源有没有传正确的邮箱声明。有些外部IDP因为自身隐私策略,不会把真实邮箱传给Azure AD,导致Azure AD返回占位符。可以去看Azure AD的联合日志,查身份源发送的断言内容。检查租户隐私设置
看看Azure AD租户的隐私配置,是不是开了限制用户个人信息对外暴露的策略。比如租户级的"用户数据访问"设置,要是管理员配了限制应用读取用户邮箱,就会触发这个保护机制。直接在Azure AD门户的"隐私"板块里查相关设置就行。确认授权请求的scope参数
验证OIDC授权请求里有没有包含email范围。如果请求时没指定email范围,Azure AD可能不会返回真实邮箱,而是返回占位符。要保证授权请求的scope参数包含openid email profile。查看Azure AD审核日志
搜相关用户的OIDC认证日志,看看有没有邮箱声明被屏蔽的记录。日志里可能会有触发策略的原因,比如合规规则、隐私政策之类的,能帮你定位具体问题。
内容的提问来源于stack exchange,提问作者jonesk

