如何从Curity Identity Server事件监听器上下文获取委托关联的活跃access token
针对Curity Identity Server事件监听器获取关联Access Token的解答
注:以下结论仅适用于Curity Identity Server 6.x及以上稳定版本
首先给出明确结论:默认无法直接从事件监听器上下文获取与指定Refresh Token关联的全部Access Token,必须在监听器内和数据源交互完成查询。
具体原因说明
- Curity的事件上下文仅会携带触发当前事件的直接关联令牌信息,比如当前Refresh Token本身的元数据、触发事件对应的单条Access Token(仅当事件为单条Access Token签发、过期等相关场景时才会携带),不会预加载和该Refresh Token绑定的全量历史或有效Access Token列表。
- Refresh Token和其派生的所有Access Token的关联关系仅持久化在Curity配置的令牌存储数据源中(通常为JDBC数据库、Redis或自定义令牌存储服务),不会提前加载到事件上下文的内存对象内。
实现方式
你可以直接调用Curity官方提供的TokenStore服务接口完成查询,不需要自行封装数据源操作逻辑,参考示例代码:
// 首先在监听器类中注入TokenStore实例 private final TokenStore tokenStore; public CustomTokenEventListener(TokenStore tokenStore) { this.tokenStore = tokenStore; } // 事件处理逻辑内调用查询方法,入参为目标Refresh Token的jti或唯一标识 List<AccessToken> relatedAccessTokens = tokenStore.getAccessTokensByRefreshTokenId(refreshTokenId);
注意事项
- 如果你使用自签名JWT格式的Access Token,默认仅会存储令牌元数据,不会存储完整JWT串,若需要获取完整令牌内容需要提前调整令牌存储配置,开启JWT全量存储开关。
- 高并发场景下频繁查询令牌存储可能带来性能损耗,可根据业务需要配置令牌存储的缓存层优化查询效率。
内容的提问来源于stack exchange,提问作者HazzeWazze
相关产品推荐
相关产品推荐

