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

如何通过编程方式撤销已注册应用的用户授权?

如何通过编程方式撤销已注册应用的用户授权?

我太懂你这种头疼的感觉了——用户点了“取消关联”,不仅要清理自己数据库里的用户数据、事件和钩子,还得让应用彻底从用户的权限管理列表里消失,之前试了各种API都碰钉子,确实让人抓狂。结合你用Microsoft Graph权限的场景,我给你梳理一套能彻底解决问题的步骤,还有之前可能踩过的坑:

首先,先确认你有足够的操作权限

这是很多人失败的根源!要操作用户的权限授予和会话,你的应用需要拿到对应的权限:

  • 如果是**以用户的身份(交互式令牌)**执行操作:需要申请Directory.AccessAsUser.All委托权限(这个权限用户自己就能同意,不需要管理员审批)。
  • 如果是**后台服务(应用身份)**执行操作:需要申请DelegatedPermissionGrant.ReadWrite.All或者User.ReadWrite.All的应用权限(这个需要管理员同意)。

两步走实现彻底撤销

1. 先失效用户的所有刷新令牌(防止后续越权访问)

调用revokeSignInSessions API,把用户当前所有的刷新令牌都废掉,这样就算你之前存了令牌,也没法再获取新的访问令牌了:

POST /users/{user-id}/revokeSignInSessions

这里的user-id可以用用户的Object ID或者UPN(用户主体名称,比如xxx@domain.com),推荐用Object ID,避免邮箱变更的问题。

2. 删除用户给你的应用的权限授予记录(关键!让应用从列表消失)

这一步才是让应用从用户权限管理页面消失的核心操作:

  • 先查询用户名下所有的权限授予记录,筛选出属于你的应用的那条:
    GET /users/{user-id}/oauth2PermissionGrants
    
    返回结果里,找到clientId等于你的应用ID的那条记录,记下它的id(也就是grant-id)。
  • 然后调用删除接口干掉这条记录:
    DELETE /oauth2PermissionGrants/{grant-id}
    

那些容易踩的坑

  • 权限不够就瞎调用:之前你用的Calendars.ReadWrite这类权限只能操作日历,根本没权限碰权限授予记录,所以一定要确保调用API的令牌包含我上面说的权限。
  • 找错了grant-id:有些用户可能给多个应用授权,一定要严格筛选clientId等于你的应用ID的记录,别删错了。
  • 混淆了应用身份和用户身份:如果是用户在你的应用里主动取消关联,用用户当前的令牌(带Directory.AccessAsUser.All)操作最直接,不需要后台服务介入。

执行完这两步,用户再去权限管理页面,你的应用就彻底消失了,同时所有的访问权限也被收回,完美实现你要的“彻底清理”效果。

备注:内容来源于stack exchange,提问作者Marko Gasparic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:59:53