配置Azure OAuth后,无法从Microsoft Graph API oidc/userinfo端点获取邮箱
问题描述
已在Azure完成OAuth配置,获取到authorization_code并兑换为access_token,调用Microsoft Graph API的oidc/userinfo端点获取用户信息时,返回结果未包含邮箱字段。返回内容如下:
{ "sub": "<redacted>", "name": "John Doe", "family_name": "John", "given_name": "Doe", "picture": "https://graph.microsoft.com/v1.0/me/photo/$value" }
根据文档,返回邮箱需要email权限范围,已确认:
- 应用权限已配置
/oauth2/v2.0/token请求的scope包含profile、openid、email和user.Read
可能的遗漏点
- 用户邮箱属性未设置:Azure AD中该用户的
mail或userPrincipalName(若为邮箱格式)字段为空,userinfo端点的email字段依赖这两个属性。需在Azure AD用户管理页面检查用户的邮箱信息是否已正确填充。 - 权限未实际生效:即使配置了权限,若未重新发起授权流程,旧的
access_token可能未包含email权限声明。可以用jwt.ms解析当前的access_token,查看scp(委托权限)或roles(应用权限)字段是否包含email;若没有,需重新走授权流程获取新令牌。 - 权限类型不匹配:如果使用的是授权码流(用户登录场景),需要配置委托权限而非应用权限。检查应用权限列表中,
email权限是否为委托类型,且已完成管理员同意(若为租户级应用)。 - 端点特性限制:部分场景下,即使拥有
email权限,若用户邮箱未经过Azure AD验证,userinfo端点可能不返回该字段。可以尝试调用Microsoft Graph的/me端点,查看返回的mail或userPrincipalName字段,确认邮箱信息是否存在。
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

