【发布时间】:2025-12-29 21:15:16
【问题描述】:
我有一个在 Kubernetes 集群上运行的 keycloak 服务器和一个 spring boot 应用程序,我面临 2 个场景,第一个正在工作,另一个我得到 401 Unauthorized。
第一个场景:
- 在我的 k8s 集群中输入带有 kubectl exec 命令的测试容器,并通过 curl POST 请求请求令牌: http://keycloak-service-name:8080/auth/realms/lisa/protocol/openid-connect/token
- 我得到一个令牌
- 我使用该令牌从邮递员发送请求到我的应用程序的安全端点,并且 它正在运行,已授予访问权限
第二种情况:
- 通过向以下地址发送 POST 请求来请求令牌:http://keycloak-external-ip:port/auth/realms/lisa/protocol/openid-connect/token 以及来自邮递员的必要参数
- 我收到一个访问令牌
- 我使用我的应用程序的令牌从邮递员向安全端点发送请求,我得到 401 未授权
Keycloak 使用 NodePort 服务公开。
应用使用 istio 入口网关公开。
Keycloak 服务器版本:9.0.0。
spring boot 应用中的keycloak 版本:10.0.2
【问题讨论】:
-
这里也是,Keycloak forum发了一个问题。
-
您好,您可以在您的问题中添加以下内容吗?: 1. 有关对 istio 入口网关的传入请求的详细信息。 2. istio ingress gateway背后的应用细节。 3. 您的 istio 入口网关的日志。
-
这是我通过 istio 网关发送以测试我的应用程序的请求的卷曲:curl --location --request GET 'gateway-external-ip/history/admin/v1/health' \ --header 'Cookie: JSESSIONID=2C40C674EA1A3D13BEC98313BB3D23C6; JSESSIONID=B1CF761DA1349D2AF40F7DB11FBB2503' \ --header '授权:承载令牌'
-
该问题很可能与外部调用的 JWT ISS 检查失败有关。在我看来,它是基于本地服务/主机名配置的。您可以通过检查日志来验证这一点。看看这个 githubpost 看看如何查看日志。
标签: spring-boot kubernetes spring-security keycloak istio