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

无需重新认证,如何通过Microsoft OAuth获取其他资源Access Token?

问题原因

你当前的报错是因为初始授权仅获取了XboxLive相关权限,refresh token的权限范围被限制在首次授权的scope内,无法直接用它获取未经过用户授权的Graph API相关scope的令牌。

解决方案:增量授权(无需用户重新输入密码,仅需同意新权限)

要获取包含Graph API scope的新令牌,必须发起增量授权请求,引导用户再次授权新增的权限范围,具体步骤如下:

  1. 构造增量授权请求URL
    使用Microsoft Identity Platform的v2.0授权端点,包含原有scope和新增的Graph相关scope,确保用户仅需确认新增权限:
https://login.microsoftonline.com/common/oauth2/v2.0/authorize
?client_id=<CLIENT_ID>
&response_type=code
&scope=XboxLive.signin offline_access https://graph.microsoft.com/.default openid
&redirect_uri=<REDIRECT_URL>
&prompt=consent
&login_hint=<USER_EMAIL>  # 可选,预填用户邮箱提升体验
  • prompt=consent:强制弹出权限同意界面,确保用户确认新增的Graph权限
  • 保留原有scope是为了避免丢失已授权的XboxLive权限
  1. 获取新的authorization_code
    用户访问上述URL并同意权限后,会跳转到指定的redirect_uri,携带新的code参数。

  2. 用新code换取全量权限的令牌
    调用token端点,用新code获取包含XboxLive和Graph权限的access_token和refresh_token:

https://login.microsoftonline.com/common/oauth2/v2.0/token
grant_type=authorization_code
client_id=<CLIENT_ID>
client_secret=<CLIENT_SECRET>
code=<NEW_AUTHORIZATION_CODE>
redirect_uri=<REDIRECT_URL>
scope=XboxLive.signin offline_access https://graph.microsoft.com/.default openid
  1. 后续用新refresh_token获取Graph令牌
    拿到新的refresh_token后,即可直接用它获取Graph相关的access_token,无需用户再次操作:
https://login.microsoftonline.com/common/oauth2/v2.0/token
grant_type=refresh_token
client_id=<CLIENT_ID>
client_secret=<CLIENT_SECRET>
refresh_token=<NEW_REFRESH_TOKEN>
scope=https://graph.microsoft.com/.default openid offline_access

注意事项

  • 必须使用login.microsoftonline.com的v2.0端点,而非旧的login.live.com端点,v2.0支持增量授权和统一权限管理。
  • 增量授权时必须包含所有需要保留的原有scope,否则新令牌会丢失原有权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:39:21