触发Terminate Session API后如何Revoke Access Token?WSO2集成问题
解决WSO2 IS登出时同步撤销Access Token的问题
核心原因
Terminate Session API仅负责清理用户的SSO会话,但会话与OAuth2 Access Token是独立实体,默认无联动撤销逻辑,所以仅调用该API后Token仍会保持活跃。
解决方案步骤
1. 获取用户活跃Access Token列表
在触发Terminate Session API前后,调用WSO2 IS的List OAuth2 Tokens of a User接口,获取目标用户的所有活跃Access Token:
GET /oauth2/tokens?user=<用户名>&user-domain=<用户域>
请求需携带具备internal_token_mgt权限的管理员Bearer Token。
2. 批量撤销Access Token
对返回的每个Access Token,调用Revoke Token API完成撤销:
POST /oauth2/revoke Content-Type: application/x-www-form-urlencoded token=<目标Access Token>&token_type_hint=access_token
请求可使用管理员Bearer Token,或通过客户端凭证(Client ID + Client Secret)完成认证。
3. 整合到登出流程
将上述逻辑嵌入“登出所有设备”的触发流程:
- 第一步:调用Terminate Session API终结用户所有SSO会话
- 第二步:调用List OAuth2 Tokens API获取用户活跃Token
- 第三步:遍历Token列表,逐个调用Revoke Token API完成撤销
4. 进阶:配置会话与Token自动联动
若不想手动调用多API,可通过修改WSO2 IS配置,实现会话终止时自动触发Token撤销:
- 打开
<IS_HOME>/repository/conf/deployment.toml - 添加以下配置:
[oauth.token_cleanup] enable = true session_termination_triggers_token_revocation = true
- 重启WSO2 IS,此后调用Terminate Session API时,系统会自动清理该用户关联的所有活跃Access Token。
注意事项
- 调用Token相关API的账号需具备
internal_token_mgt、internal_identity_mgt权限,建议创建专用服务账号 - 会话联动Token撤销的配置仅支持WSO2 IS 5.10.0及以上版本
- 需确保客户端应用能正确处理Token失效场景,比如触发重新登录流程
内容的提问来源于stack exchange,提问作者Sujith Fredrick
相关产品推荐
相关产品推荐

