如何撤销Azure AD OAuth令牌以实现用户应用断开连接?
你找的/oauth2/deauthorize端点不属于Azure AD(AAD)的标准OAuth2.0接口体系,这是部分第三方身份服务商自定义的断开端点,AAD没有对应实现。要实现用户断开连接时的令牌失效,按以下分层操作即可覆盖所有场景:
本地侧令牌清理(必做,即时生效)
断开操作触发后,第一时间从你方的数据库、缓存存储中彻底删除当前用户关联的所有AAD访问令牌、刷新令牌记录,从你方业务侧直接杜绝令牌被误用的可能。注意:AAD签发的访问令牌是无状态JWT格式,默认有效期1小时,签发后到期前无法被远程强制作废,本地清理是阻断未到期访问令牌被滥用的最快手段。
调用AAD标准接口吊销对应刷新令牌
向AAD令牌吊销端点发送POST请求,作废你持有的刷新令牌,阻断后续续期新令牌的能力,请求格式如下:POST https://login.microsoftonline.com/{你的AAD租户ID}/oauth2/v2.0/token/revoke Content-Type: application/x-www-form-urlencoded请求体携带以下表单参数:
client_id={你方应用在AAD注册的客户端ID} client_secret={你方应用对应的客户端密钥} token={需要作废的刷新令牌原值}接口调用成功后,该刷新令牌以及和它绑定的所有令牌链都会被标记为失效,等剩余有效时间的访问令牌到期后,这组授权凭证就完全无法使用。
(可选,高安全场景)彻底移除用户对应用的授权
如果需要完全撤销用户之前给你方应用授予的所有委托权限,让用户下次发起连接时必须重新走授权同意流程,可以调用Microsoft Graph对应接口删除用户的授权记录:DELETE https://graph.microsoft.com/v1.0/users/{对应用户的AAD对象ID}/oauth2PermissionGrants/{对应授权记录的ID} Authorization: Bearer {具备权限删除授权的应用访问令牌}调用该接口需要你方应用提前在AAD中申请
PermissionGrant.ReadWrite.All相关的Graph权限,适合对权限隔离要求严格的业务场景。
你之前尝试构造的请求头、请求参数格式和AAD标准接口要求不匹配,按上述格式调整即可实现断开连接时的令牌撤销能力。
内容的提问来源于stack exchange,提问作者Eugene Reyek

