You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OAuth Token权限未在Access Token Scope中显示的问题排查求助

问题分析与修复方案

根因定位

你遇到的问题是**https://graph.microsoft.com/.default 静态权限集合与 offline_access 组合触发的Azure AD权限缓存延迟**:

  • .default scope会直接映射你在Azure AD应用注册中已获得同意的所有权限,但当你在授权码流中同时请求.default和offline_access时,Azure AD首次处理token交换请求时,权限同意的元数据可能还没完全同步到token生成的缓存系统里,导致返回的access token只包含基础权限,而非全部已授予的权限。
  • 当你后续用refresh token重新获取access token时,缓存已经完成同步,所以能拿到完整权限的token。
  • 不用offline_access时,授权码流返回的是短期access token,权限判断是实时拉取的,因此不会出现延迟问题。

修复方案

1. 用具体权限替换.default(推荐)

不要依赖.default自动拉取所有权限,而是明确指定调用ListUsers所需的具体权限,比如应用权限用User.Read.All,委托权限用User.ReadBasic.All,把请求的scope改成:

User.Read.All offline_access

这种方式下,权限请求是明确的,Azure AD会在首次token交换时直接返回你请求的权限,彻底避免缓存延迟问题。

2. 首次获取token后立即刷新

如果必须使用.default,可以在首次拿到access token后,立刻用返回的refresh token调用token刷新接口,获取新的access token——此时缓存已经同步完成,新token会包含所有已授予的权限,之后再用这个token调用Graph API即可。

3. 等待权限同步完成

如果是刚完成管理员权限同意操作,先等待3-5分钟再发起授权请求,确保Azure AD的权限元数据完成全局同步,避免首次请求落在同步窗口期内。

验证步骤

  • 用JWT解析工具解析首次和刷新后的access token,对比两者的scope字段,确认权限缺失确实是缓存延迟导致的。
  • 登录Azure AD门户,检查应用注册的“API权限”页面,确认所有需要的权限都已标记为“已授予”状态(管理员同意的权限会显示绿色对勾)。

内容的提问来源于stack exchange,提问作者Amar sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:05:23