WSO2 API Manager双节点集群JWT令牌验证失败求助
WSO2 API Manager集群JWT验证错误排查方案
问题背景
双节点All-in-One模式WSO2 APIM集群中,生成JWT令牌后调用数次请求会触发如下错误:
ERROR - JWTValidator Invalid JWT token. XXXXX":"RS256"}
客户端需重新生成令牌才能继续请求;单节点生成令牌后切换到另一节点,令牌可正常工作,但存在提前吊销/过期的异常情况,且已确认节点系统时间无显著差异。
核心原因
集群节点间的JWT签名密钥、令牌缓存、会话数据未实现同步,导致跨节点验证时出现一致性问题。
修复步骤
1. 统一节点密钥库
确保两个节点使用完全相同的wso2carbon.jks密钥库文件:
- 从主节点复制
<APIM_HOME>/repository/resources/security/wso2carbon.jks到从节点对应路径 - 替换后重启两个节点服务
2. 启用分布式令牌缓存
配置节点使用共享数据库同步令牌缓存:
编辑<APIM_HOME>/repository/conf/deployment.toml,添加以下配置(两个节点保持一致):
[cache] enable_distributed_cache = true [cache.jdbc] enabled = true datasource = "WSO2_SHARED_DB"
确保两个节点已配置同一个WSO2_SHARED_DB数据源。
3. 持久化会话数据
将身份验证会话数据存储到共享数据库,避免本地内存隔离:
在deployment.toml中添加:
[session_data.persistence] enabled = true datasource = "WSO2_SHARED_DB"
4. 同步令牌吊销列表(TRL)
配置节点间同步令牌吊销状态:
[revocation] enable_remote_cache = true cache_expiry_time = 300
5. 统一JWT issuer配置
修改JWT issuer为集群负载均衡地址(而非单个节点地址),确保所有节点生成的令牌issuer字段一致:
[apim.jwt] enable = true signing_algorithm = "RS256" issuer = "https://<集群负载均衡域名>:<端口>/oauth2/token"
验证流程
- 重启所有节点,通过负载均衡地址生成JWT令牌
- 交替向两个节点发起请求,确认令牌可正常通过验证
- 重启任意节点,使用旧令牌请求,验证无提前吊销/过期问题
内容的提问来源于stack exchange,提问作者Issa Dicko
相关产品推荐
相关产品推荐

