所以我有一个弹簧启动应用程序。我也使用招摇进行测试。 我在 docker-compose 中定义了一个密钥斗篷,如下所示:
keycloak:
image: jboss/keycloak
ports:
- "18080:8080"
volumes:
- ../keycloak:/opt/jboss/keycloak/imports
command:
- "-b 0.0.0.0 -Dkeycloak.import=/opt/jboss/keycloak/imports/realm-export.json"
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
当我尝试运行我的 Spring 启动应用程序时,我使用http://localhost:18080/auth
作为keycloak_auth_url
。从我的机器运行时一切正常。
当通过 docker-compose 运行时,我将 keycloak url 更改为:http://keycloak:18080/auth
但是 Swaggers 用于将用户重定向到 KeyCloak 的 URL 保持不变http://localhost:18080/auth
通过招摇进行身份验证"有效"。但是当我尝试以经过身份验证的用户身份调用 API 端点时,我的服务器返回以下错误:
Error when sending request to retrieve realm keys
myApp |
myApp | org.keycloak.adapters.HttpClientAdapterException: IO error
Didn't find publicKey for kid: U7a58q_oR3zXWSAwVUIa_7FvhdA7IncCQ2IfKQKDGfI
myApp | 2020-01-07 11:58:40.615 ERROR 1 --- [nio-8082-exec-1] o.k.a.BearerTokenRequestAuthenticator : Failed to verify token
现在我不确定我的应用程序无法连接到 keycloak 以检查令牌的问题。 还是令牌检查失败?
感谢所有的帮助
如果要从组合设置的其他容器连接到它,则必须将keycloak_auth_url
更改为http://keycloak:8080/auth
(如果您使用的是 spring-boot,则可以使用环境变量而不是硬编码它(。
8080
端口是在 keycloak 容器中运行密钥的端口,18080
端口是发布到host
的端口。