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

调用Kong代理端点遇连接拒绝,OIDC与Keycloak配置求助

排查Kong代理连接拒绝问题的步骤

咱们从最基础的环节开始一步步排查,缩小问题范围:

1. 先确认后端服务本身是否可用

跳过Kong,直接访问你的/listProducts/端点,执行以下命令测试:

curl http://{后端服务IP:端口}/listProducts/ --header 'Accept: application/json'

如果这个请求也返回连接拒绝,那问题根本不在Kong或OIDC配置上,优先检查后端服务是否启动、端口是否正确,或者是否有防火墙拦截了请求。

2. 检查Kong的上游(Upstream)和路由(Route)配置

这是网关代理最容易出错的环节:

  • 确认你创建的上游服务,IP和端口完全匹配后端服务的真实地址,别用localhost(如果Kong和后端不在同一机器,localhost指的是Kong自身,而非后端服务)
  • 检查路由的路径规则:你的路由paths是否设置为/listProducts/?有没有配置路径重写规则导致请求被转发到错误的后端路径?
  • 可以用Kong Admin API验证配置,比如查询目标路由的详情:
curl http://localhost:8001/routes/{你的路由ID}

重点查看upstream_id是否关联到正确的上游服务,paths是否匹配你的请求路径。

3. 修正OIDC插件的配置错误

从你给出的配置来看,有几个明显的问题需要调整:

3.1 Discovery地址不匹配

你获取token用的是experimental realm,但插件的discovery地址指向了master realm,这会导致Kong无法正确获取OIDC端点信息,修改为:

http://{MyHostIP}:8180/auth/realms/experimental/.well-known/openid-configuration

另外你获取token用的是HTTP协议,所以discovery地址也保持HTTP即可(你已经设置ssl verify: no,这个配置没问题)。

3.2 客户端认证方式冲突

你提到客户端是公开访问类型,但插件里设置了token endpoint auth method: client_secret_post——公开客户端(比如SPA、移动APP)没有client_secret,也不能使用需要secret的认证方式,应该改成:

token endpoint auth method: none

同时将client secret留空,因为公开客户端不需要secret。

3.3 客户端权限配置

确保Keycloak里给Kong使用的客户端(插件配置的client id: kong)开启了Token Introspection权限:

  • 登录Keycloak控制台,进入experimental realm → 客户端 → 找到kong客户端
  • 打开Service Accounts Enabled开关
  • 切换到Service Account Roles标签,添加realm-management下的introspect tokens角色
  • 保存配置

3.4 验证Introspection端点可用性

直接测试Keycloak的introspection端点是否正常工作:

curl http://{MyHostIP}:8180/auth/realms/experimental/protocol/openid-connect/token/introspect \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'client_id=kong' \
  --data-urlencode 'client_secret=myClientSecret' \
  --data-urlencode 'token=你的Bearer token'

如果返回{"active":true},说明端点正常;如果返回错误,根据提示排查(比如客户端权限不足、token无效)。

4. 检查网络连通性

  • 在Kong所在的机器/容器中,测试能否访问Keycloak:
curl http://{MyHostIP}:8180/auth/realms/experimental

如果不通,说明Kong和Keycloak之间存在网络隔离(比如容器网络不通、防火墙规则拦截),先解决网络问题。

  • 同样在Kong机器上测试能否访问后端服务地址,确保Kong能正常连接后端。

5. 查看日志定位具体错误

日志是排查问题的核心依据:

  • Kong日志:如果是容器部署,执行docker logs kong;如果是主机部署,查看/usr/local/kong/logs/error.log和access.log,寻找连接后端失败、token验证错误的具体信息。
  • Keycloak日志:查看Keycloak的日志,确认introspection请求是否到达,是否有权限错误或其他异常。

按这个顺序排查,应该能快速定位连接拒绝的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:57:55