You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Keycloak Java适配器(2.1.0-Final)出现Connection reset异常咨询

排查Keycloak适配器2.1.0-Final中java.net.SocketException: Connection reset异常的思路

针对你遇到的这个非Connection reset by peer的连接重置问题,结合你的配置里提到的AWS ALB和public-client设置,我整理了几个实用的排查方向,你可以逐一验证:

1. 连接池配置与ALB Idle Timeout不匹配

AWS ALB默认的空闲连接超时时间是60秒,如果Keycloak适配器的HTTP连接池没有设置合理的连接存活时间或空闲超时,就会出现ALB主动断开闲置连接后,客户端复用该连接时抛出Connection reset的情况。

你当前的配置里没有指定连接池相关参数,Keycloak适配器的默认连接池可能会保持长连接超过ALB的超时阈值。建议在AdapterConfig中添加以下参数来对齐:

{
  "realm": "realm_name",
  "realm-public-key": "xxxxx",
  "auth-server-url": "some_url_going_through_AWS_ALB",
  "ssl-required": "external",
  "resource": "client_id",
  "public-client": true,
  "connection-pool-size": 15, // 根据应用并发量调整
  "connection-ttl": 55000, // 设置为比ALB idle timeout短5秒,单位毫秒
  "socket-timeout": 30000,
  "connect-timeout": 10000,
  "connection-pool-test-on-borrow": true // 借连接前校验可用性,避免复用已断开的连接
}

2. 旧版本适配器的连接池管理bug

Keycloak 2.1.0-Final是比较早期的版本,这个版本的HTTP连接池实现可能存在未正确处理连接关闭、keep-alive逻辑的问题。我之前碰到过类似老版本适配器在负载均衡场景下的连接复用异常,建议你查看该版本的release notes确认是否有相关已知问题,同时考虑升级到同系列的较新版本(比如2.5.5.Final),如果应用架构允许,也可以迁移到更稳定的Quarkus集成Keycloak适配器。

3. 网络中间设备的主动断开

除了ALB,客户端到ALB之间的防火墙、NAT网关等设备也可能存在主动断开长连接的规则。你可以通过tcpdump这类抓包工具在客户端侧捕获流量,确认Connection reset的发起方是ALB还是其他网络设备。如果是其他设备,需要调整对应设备的超时规则,或者在适配器侧进一步缩短连接存活时间来适配。

4. Public Client场景下的特殊请求处理

虽然你配置了public-client: true,适配器在验证token、获取realm公钥的时候仍然会和Keycloak服务器建立HTTP连接。这部分请求的连接池同样会受上述超时问题影响,确保你添加的连接池配置会作用于所有适配器发起的请求。


内容的提问来源于stack exchange,提问作者Amir Keibi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:20:15