如何获取用户用于Azure AD SSO登录的实际邮箱地址?
Azure AD SSO 回调环节获取用户实际登录邮箱方案
1 需请求的对应属性
根据你的实际需求选择对应属性即可:
- 若需要获取用户本次登录实际输入的登录邮箱标识符:直接读取ID令牌中的
login_hint声明,该值完全和用户本次登录输入的凭证一致,不受租户侧属性修改影响。 - 若需要获取用户所属组织分配的官方主收发邮箱:调用Microsoft Graph
/me接口读取proxyAddresses属性,该属性为数组,其中前缀为大写SMTP:的条目即为用户的主邮箱地址,和用户实际收发邮件的地址完全一致。 - 若需要获取用户所有可用于登录的有效邮箱列表:调用Microsoft Graph
/me接口读取signInNames属性,该数组中类型为emailAddress的条目均为用户绑定的合法登录邮箱。
2 所需申请的权限配置
- 仅读取ID令牌的
login_hint:无需额外申请API权限,只需在Azure AD应用注册的「令牌配置」板块添加login_hint作为可选声明即可,单租户、多租户部署方案均适用。 - 调用Microsoft Graph读取用户属性:申请
Microsoft Graph的User.Read委托权限即可,该权限为最小粒度权限,无需管理员审批,用户登录时自行同意即可授权;如果是后台无用户交互的服务场景,可申请User.Read.All应用权限,该权限需要租户管理员审批同意。
此前你测试的属性偏差原因
upn、preferred_username、
upn可由租户管理员任意修改,大量企业场景下UPN和用户实际登录、收发邮箱不一致preferred_username仅为前端展示用字段,不保证和实际登录/业务邮箱一致- 原生
内容的提问来源于stack exchange,提问作者Oleksandr Savchenko
相关产品推荐
相关产品推荐

