You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MS Graph API令牌权限撤销问题(OAuth 2.0授权码流程)

MS Graph API令牌权限撤销问题(OAuth 2.0授权码流程)

我来帮你排查这个常见的MS Graph令牌失效问题,结合你描述的场景——初始授权正常、几天后刷新令牌拿新access token出现401/403,大概率是以下几个原因导致的,对应解决办法也给你列出来了:

1. 刷新令牌被提前吊销或过期

微软的刷新令牌默认有效期是90天,但如果出现以下情况,会被提前吊销:

  • 用户修改了自己的微软账户密码
  • 用户手动撤销了对你应用的授权(在微软账户的「已授权应用」列表里取消了你的应用权限)
  • 租户管理员在Azure AD中撤销了应用的权限,或者限制了该用户的访问权限

解决办法

  • 在应用中捕获401/403错误,当检测到刷新令牌失效时,引导用户重新走OAuth 2.0授权码流程,获取新的访问令牌和刷新令牌
  • 可以做个自动重试机制:第一次刷新失败后,直接触发重新授权,提升用户体验

2. 权限范围被变更或限制

你使用的openid profile email Mail.Read Mail.Send offline_access这些权限,如果后续出现以下情况,会导致刷新令牌失效:

  • 租户管理员调整了应用的权限策略,比如降级了邮件相关的权限
  • 用户的账户被移除了对应的邮箱访问权限(比如邮箱被注销或权限被收回)

解决办法

  • 登录Azure AD门户,检查你的应用权限配置,确认所有需要的权限都处于「已授予」状态
  • 如果是委托权限(delegated permissions),确认用户的账户仍然拥有对应的资源访问权限(比如邮箱读写权限)

3. 刷新令牌请求参数错误

有时候刷新令牌时,参数配置错误也会触发401/403,常见的错误点:

  • grant_type没有设置为refresh_token
  • scope和初始授权时的范围不一致(必须完全匹配,不能新增或减少权限)
  • client_idclient_secret填写错误

解决办法

  • 检查你的刷新令牌请求体,确保参数完全正确,示例请求如下:
POST /token HTTP/1.1
Host: login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

client_id=你的客户端ID
&scope=openid%20profile%20email%20Mail.Read%20Mail.Send%20offline_access
&refresh_token=你的刷新令牌
&grant_type=refresh_token
&client_secret=你的客户端密钥(如果是机密客户端)
  • 重点注意:scope必须和第一次授权时完全一致,不能有任何变化

4. 条件访问策略限制

如果你的应用是多租户应用,或者用户所在租户开启了条件访问策略(比如要求MFA、限制访问地理位置等),当刷新令牌时不符合策略要求,就会返回401/403。

解决办法

  • 联系租户管理员,检查Azure AD的条件访问规则,确认你的应用是否被允许绕过或符合策略要求
  • 如果是单租户应用,确认租户的条件访问配置没有变更

调试小技巧

  • 用Postman手动发送刷新令牌请求,查看响应中的error_description字段,微软会给出具体的失效原因(比如invalid_grant表示刷新令牌无效,interaction_required表示需要用户重新交互授权)
  • 查看Azure AD的审计日志,里面会记录令牌吊销、权限变更等操作,能帮你快速定位问题根源

备注:内容来源于stack exchange,提问作者Md Faizan

火山引擎 最新活动