9月30日微软已知问题后调用Graph API获取Outlook头像报未授权错误如何解决
你调用的Microsoft Graph接口为 GET /users/{id | userPrincipalName}/photo,返回的错误信息如下:
Unauthorized: Access is denied due to invalid credentials. You do not have permission to view this directory or page using the credentials that you supplied.
问题成因
- 9月30日微软针对Graph接口的权限校验逻辑完成了安全更新,修复了头像接口此前权限校验宽松的漏洞:此前部分应用未配置头像访问的专属权限,仅通过Groups关联权限、基础用户信息读取权限即可正常调用接口,更新后该类隐式授权逻辑已被完全移除,只有明确配置的头像访问权限才会被系统认可。
- 你的应用本地缓存的授权令牌生成于更新发布之前,令牌内未包含更新后要求的必填权限范围,调用时会被校验逻辑直接拦截。
解决方案
- 调整应用注册的权限配置
- 委派权限场景(用户登录后调用接口):如果仅访问当前登录用户的头像,补充
User.Read委派权限即可;如果需要访问组织内其他用户的头像,补充User.Read.All委派权限,所有新增权限都需要完成管理员同意操作后生效。 - 应用权限场景(后台服务无用户交互调用):补充
User.Read.All应用权限,完成管理员全局同意后才可正常使用。
- 委派权限场景(用户登录后调用接口):如果仅访问当前登录用户的头像,补充
- 清理历史令牌缓存:删除所有应用侧存储的9月30日之前生成的授权令牌,重新向Azure AD请求新的令牌,可自行解码确认返回的令牌scope字段中包含你新增的权限。
- 紧急恢复方案:如果需要快速恢复服务,可以暂时切换调用
GET /users/{id | userPrincipalName}/photos/$value接口,该接口在此次更新中校验逻辑变动较小,配置正确权限后可以立即恢复访问。
内容的提问来源于stack exchange,提问作者Charmy
相关产品推荐
相关产品推荐

