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

Azure AD OAuth2授权时自动添加offline_access权限问题咨询

关于微软OAuth2授权码流程权限显示与Scope异常的问题解答

我最近在开发者社区里碰到好几个和你情况一模一样的案例,尤其是微软切换新权限授予界面之后,这种“显示和实际请求不匹配”的情况确实挺让人困惑的,咱们来逐个把问题理清楚:

1. 为什么界面会显示“随时访问你的数据”?

这其实是新界面的文案分组逻辑导致的——微软把一些关联权限打包成了更易懂的用户级描述,哪怕你只请求了User.Read,但这个权限在v2端点下和User.ReadBasic.All是强关联的(从你后续返回的scope也能验证这点),界面就用了“随时访问你的数据”这个宽泛的文案来概括这类用户资料访问权限,并不是真的授予了离线访问权限(毕竟你没加offline_access)。另外你请求里加了prompt=consent,这个参数会强制弹出权限确认界面,哪怕用户之前已经授权过,也会重新展示这些分组后的权限描述。

2. 返回的Scope为什么多了User.ReadBasic.All?

这是微软v2授权端点的默认行为:在面向组织租户(你加了domain_hint=organizations)的场景下,User.Read权限会自动附带User.ReadBasic.All的权限,或者说这两个权限在v2模型里是绑定的,和旧版v1端点的权限逻辑不一样。你可以理解为v2端点为了简化开发者操作,自动补充了关联的基础用户资料访问权限。

3. 为什么没有返回刷新令牌?

这个逻辑其实没变:只有显式请求offline_accessScope,才会返回刷新令牌。界面显示的“随时访问你的数据”只是文案描述,不代表实际授予了离线访问权限。你没在scope里加offline_access,所以交换令牌时自然不会拿到刷新令牌,这是符合OAuth2规范和微软v2端点规则的。

解决建议

  • 如果你不想看到“随时访问你的数据”这个文案,可以尝试移除prompt=consent参数(除非业务上必须强制用户重新授权),当用户已经授权过对应的权限时,界面会跳过确认步骤,或者展示更精准的权限描述;
  • 检查你的应用注册配置,确保没有在后台额外添加User.ReadBasic.All或其他离线权限;
  • 如果你不需要User.ReadBasic.All,可以在拿到令牌后自行过滤掉这个Scope,但从v2端点的行为来看,这个权限是User.Read的附带项,很难完全避免;
  • 如果确实需要刷新令牌,必须在授权请求的scope参数里明确加上offline_access,这时候界面会正确显示“允许应用随时访问你的数据”的离线权限描述,同时交换令牌时会返回刷新令牌。

内容的提问来源于stack exchange,提问作者Jason He

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:34:32