Azure AD OAuth登录后获取用户资料:端点与权限问题解析
解决Azure AD OAuth登录后获取用户个人资料的问题
首先得说,你选Microsoft Graph的https://graph.microsoft.com/v1.0/me方向是完全正确的——微软现在已经把旧的Outlook REST API纳入维护模式了,统一推荐用Microsoft Graph来处理所有Office 365和Azure AD相关的请求,所以咱们就聚焦在Graph上解决问题。
为什么Graph返回的mail字段是null?
你看到的mail为null的情况,通常有两个原因:
- 用户在Azure AD中的配置问题:如果这个用户没有绑定Exchange Online邮箱,Azure AD里的
mail字段本来就是空的。这时候你可以看返回的userPrincipalName,这个字段一般就是用户的登录邮箱,完全可以拿来当邮箱用。 - 权限范围不够:如果用户确实有邮箱,但还是拿不到,那就是你请求的scope不够。除了
User.Read,你需要加上User.ReadBasic.All或者Mail.Read权限(注意如果是租户内的应用,可能需要管理员提前同意这些权限)。另外,试试用Graph的v2.0端点https://graph.microsoft.com/v2.0/me,v2.0默认返回的字段会更全,对权限的适配也更灵活。
关于Outlook API的问题
你之前试的https://outlook.office.com/api/v2.0/me之所以认证失败,是因为你用的是Microsoft Graph的scope(比如User.Read),而旧的Outlook API需要的是专门的scope,比如https://outlook.office.com/User.Read或者https://outlook.office.com/Mail.Read。但还是那句话,微软已经不推荐用这个API了,后续不会更新功能,所以没必要在这上面浪费时间。
优化后的请求建议
调整你的scope为:openid profile email User.Read,然后调用https://graph.microsoft.com/v2.0/me,这样你不仅能拿到access_token,还能在返回结果里获取到显示名称、邮箱(如果存在)、用户ID等核心信息。如果还是拿不到mail,就检查下Azure AD里用户的邮箱配置,或者申请User.ReadBasic.All权限。
内容的提问来源于stack exchange,提问作者zlog
相关产品推荐
相关产品推荐

