java - 使用docker和java spring时keycloak认证问题

标签 java spring spring-boot docker keycloak

所以我有一个 Spring 启动应用程序。我也使用 swagger 进行测试。 我在 docker-compose 中定义了一个 keycloak,如下所示:

  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 Boot 应用程序时,我使用 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 以检查 token 的问题。还是检查 token 失败了?
感谢大家的帮助

最佳答案

您必须将 keycloak_auth_url 更改为 http://keycloak:8080/auth (如果您使用的是 spring-boot,您可以使用环境变量来代替硬编码)如果你想从 compose 设置的其他容器连接到它。

8080 端口是keycloack 在keycloak 容器中运行的端口,18080 端口是发布到host.

关于java - 使用docker和java spring时keycloak认证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59628162/

相关文章:

java - 如何使用 SimpleDateFormat 转换日期?

java - Java 应用程序的多线程 mysql 连接池

同一文件中的Java多个类定义

java - 在一切之前进行 Spring bean 初始化

java - @Autowire 调用期间未实例化服务类

java - Elastic Beanstalk .ebextensions 在 WAR 中被忽略

java - 我如何找出 Tomcat 使用这么多内存的原因并停止它?

spring - 如何从 REST spring 应用程序的 SqlExceptionHelper 获取有关错误的信息

java - 客户端REST认证后如何获取用户信息?

spring - bootstrap.yml 未加载 Spring Boot 2