使用docker和java spring时Keycloak认证问题

Kri*_*jan 3 java spring docker spring-boot keycloak

所以我有一个弹簧启动应用程序。我也使用 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
Run Code Online (Sandbox Code Playgroud)

当我尝试运行我的 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)

现在我不确定是我的应用程序无法连接到 keycloak 来检查令牌的问题。还是令牌检查失败了?
感谢所有的帮助

mic*_*alk 6

如果要从 compose 设置的其他容器连接到它,则必须更改keycloak_auth_urlto http://keycloak:8080/auth(如果您使用的是 spring-boot,则可以使用环境变量而不是对其进行硬编码)。

8080端口是,keycloack上的keycloak容器中运行和端口18080端口是发布到该端口host