Microsoft Graph API获取RefreshToken与AccessToken问题求助
问题原因及解决方案
问题核心原因
- 你收到的
AADSTS70008错误和scope参数本身无关,是因为授权码(code)为一次性有效,且有效期仅为几分钟,只要你用同一个code发起过一次请求,无论请求成功还是失败,该code都会立即失效,和你是否携带scope参数没有关联。 - 你移除scope参数后拿到的AccessToken没有附带RefreshToken,是因为要获取RefreshToken必须同时满足两个条件:
- 拿code的授权请求中包含
offline_access权限(你当前的配置已经满足该要求) - 用code换token的POST请求中必须在scope参数里明确包含
offline_access,否则Azure AD不会返回RefreshToken字段
- 拿code的授权请求中包含
正确操作步骤
- 重新在浏览器中发起授权请求,获取全新的未使用过的code,拿到code后需要在10分钟内完成后续操作
- 在Postman中构造POST请求到
https://login.microsoftonline.com/common/oauth2/v2.0/token,请求体使用x-www-form-urlencoded格式,携带以下参数:client_id:你的应用注册生成的客户端IDclient_secret:你生成的客户端密钥grant_type:固定填authorization_codecode:你刚获取的新的未使用过的授权码redirect_uri:必须和授权请求中填写的完全一致,即https://oauth.pstmn.io/v1/browser-callbackscope:填写你之前授权时的全部权限,必须包含offline_access
- 发起请求后,返回结果中就会包含
refresh_token字段
注意事项
- RefreshToken存在有效期,过期后需要重新走授权流程获取新的RefreshToken
- 每次用RefreshToken刷新AccessToken时,接口也会返回新的RefreshToken,建议每次刷新后替换存储的RefreshToken,避免过期失效
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

