API Manager 3.1.0搭配身份服务部署偶发认证失败锁死问题问询
排查方向
排查误区说明
你之前仅校验客户端调用API使用的OAuth有效性,排查范围覆盖不全:APIM运行过程中产生的authentication failure日志,既包含客户端请求的令牌校验失败,也包含APIM与Identity组件内部通信、跨服务调用的身份认证失败,后者是触发无响应锁死的常见诱因。
具体排查步骤
- 第一步:拆分认证失败日志的归属
过滤日志的模块前缀,区分报错场景:- 若日志模块为
org.wso2.carbon.apimgt.gateway.handlers.security:属于客户端令牌校验报错,可进一步排查是否存在未接入令牌缓存的自定义API、或者非法请求批量携带无效令牌触发的流量攻击 - 若日志模块为身份认证、内部服务相关(如
org.wso2.carbon.identity.oauth、org.wso2.carbon.core.security):属于组件内部通信认证失败,优先检查内部服务调用令牌是否过期未自动刷新、APIM与Identity节点的信任证书是否过期、共享身份库/用户库的连接是否超时中断
- 若日志模块为
- 第二步:导出锁死状态的线程栈分析
服务无响应时先不要重启,执行jstack <APIM进程ID> > thread_dump.log导出线程栈:- 若存在大量BLOCKED状态的线程阻塞在身份库的令牌查询操作:说明
IDN_OAUTH2_ACCESS_TOKEN表数据量过大未定期清理、或者数据库连接池被占满,查询超时导致线程持续堆积最终锁死 - 若存在大量WAITING状态的线程阻塞在Identity组件的令牌内省接口调用:说明Identity节点响应超时、或者APIM侧的内省调用未配置超时熔断策略,请求持续堆积占满网关工作线程
- 若存在大量BLOCKED状态的线程阻塞在身份库的令牌查询操作:说明
- 第三步:校验令牌缓存配置合理性
检查<APIM_HOME>/repository/conf/deployment.toml中的令牌缓存配置是否开启:
若令牌缓存被关闭,所有请求都会实时调用Identity组件或查询数据库做令牌校验,流量高峰时很容易打满调用链路触发无响应。[apim.oauth_config] enable_token_cache = true token_cache_expiry = 900 - 第四步:排查令牌撤销事件同步状态
若你开启了令牌即时撤销功能,检查APIM与Identity之间的JMS事件同步队列是否正常,是否存在大量撤销事件堆积未同步到APIM网关:撤销事件同步失败时,网关会频繁将已失效的令牌发往Identity做校验,大量无效请求也会占满服务资源。
内容的提问来源于stack exchange,提问作者VAM7965
相关产品推荐
相关产品推荐

