Azure AD v2 ID令牌可选声明配置后未返回问题咨询
Azure AD v2 ID令牌缺失用户基础字段排查结果
核心问题
ID令牌未返回given_name、family_name、preferred_username等字段的根本原因是授权请求的scope配置混淆了OIDC标准scope和Microsoft Graph权限scope。
你当前请求的https://graph.microsoft.com/profile、https://graph.microsoft.com/email属于Microsoft Graph的接口访问权限,仅作用于调用Graph接口的access token,完全不影响ID令牌的声明生成逻辑,和你查到的官方文档描述逻辑一致:针对其他资源(这里就是Microsoft Graph)的权限配置,不会改变返回给你自身应用的令牌内容。
配置修正方案
- 调整PKCE授权请求的scope参数,在现有Graph权限前加入OIDC协议要求的标准scope,正确的scope列表示例:
各字段作用说明:openid profile email offline_access https://graph.microsoft.com/User.Readopenid:OIDC协议必须携带的scope,是返回ID令牌的前提profile:要求ID令牌返回用户基础身份信息,包含你需要的given_name、family_name、preferred_username字段email:要求ID令牌返回用户邮箱字段offline_access:返回refresh token的必要scope,你当前能拿到refresh token说明之前大概率已经配置,可自行确认https://graph.microsoft.com/User.Read:保留你原有的Graph接口调用权限即可
- 不需要额外创建自定义scope。你当前应用清单里的
optionalClaims配置本身没有问题,角色、组声明能正常返回已经验证了清单配置生效,之前这些基础字段不返回只是因为缺少对应OIDC scope触发声明下发,调整scope后不需要修改清单配置就能拿到所需字段。
额外注意事项
- 针对本地AD同步的用户,如果需要
upn字段,需要确认Azure AD Connect同步配置中开启了UPN属性同步,且没有配置声明转换规则覆盖该字段;一般业务场景下使用preferred_username作为用户登录标识即可,兼容性更好。 - 你之前看到ID令牌中已经返回了
email字段,属于租户级配置的特殊返回逻辑,不代表scope配置正确,未携带profilescope时,所有用户基础身份类声明都不会默认下发。
内容的提问来源于stack exchange,提问作者fredex42
相关产品推荐
相关产品推荐

