未配置offline_access权限仍获取Azure AD刷新令牌的原因
问题原因分析
你的测试流程回顾
- 先调用OAuth2授权接口获取授权码:
其中https://login.microsoftonline.com/{{ Tenant-ID }}/oauth2/v2.0/authorize?......response_type设为code,请求scope包含offline_access。 - 再用拿到的授权码调用令牌接口:
请求中指定的scope为:https://login.microsoftonline.com/{{ Tenant-ID }}/oauth2/v2.0/token
最终成功获取到--data-urlencode 'scope=https://graph.microsoft.com/user.read offline_access'access_token和refresh_token,但你疑惑为什么没在应用里配置offline_access权限还能拿到刷新令牌。
核心原因
- offline_access是用户可自主授予的标准权限:Azure AD里,
offline_access属于低风险的基础权限,不需要预先在应用注册的API权限列表中配置。只要你在授权请求的scope里带上它,用户完成授权流程(哪怕是静默同意),Azure AD就会返回refresh_token。 - 混淆了应用权限和用户授权scope:你提到的“未配置offline_access API权限”,指的是应用注册里添加的应用级权限(多用于客户端凭据流),而授权码流中通过scope传递的是用户级权限,两者不是一回事。用户级的
offline_access不需要提前配置,用户同意后就能生效。 - 测试环境的权限管控特性:如果用的是个人Microsoft账户测试,Azure AD对这类账户的权限限制更宽松,
offline_access会自动允许;如果是工作/学校账户,只要管理员没设置强制审批策略,用户也能自行授予这个权限。
内容的提问来源于stack exchange,提问作者Maik Brauer
相关产品推荐
相关产品推荐

