在Docker中使用KeyCloak设置集成测试环境

时间:2018-09-09 14:25:29

标签: docker ssl openssl docker-compose keycloak

我正在尝试为使用KeyCloak保护的我们的一个Web API项目设置集成测试环境。我的想法是创建docker compose文件,在其中连接所有必需的组件,然后尝试调用其中包含的Web API并验证响应。

以下是将KeyCloak和Web API连接在一起的docker compose文件的示例

keycloak:
  image: jboss/keycloak:3.4.3.Final
  environment:
    DB_VENDOR: POSTGRES
    KEYCLOAK_USER: admin
    KEYCLOAK_PASSWORD: admin
    POSTGRES_USER: keycloak
    POSTGRES_PASSWORD: keycloak
    POSTGRES_PORT_5432_TCP_ADDR: postgres
    POSTGRES_DATABASE: keycloak
    JDBC_PARAMS: 'connectTimeout=30'
  ports:
    - '18080:8080'
    - '18443:8443'
  networks:
    - integration-test
  depends_on:
    - postgres

test-web-api:
    image: test-web-api
    environment:
    - IDENTITY_SERVER_URL=https://keycloak:18443/auth/realms/myrealm
    networks:
    - integration-test
    ports:
    - "28080:8080"

现在,当我将KeyCloak和Web API托管在不同的容器中时,我无法使用本地主机从Web API容器访问KeyCloak,因此我需要使用https://keycloak:18443/,但是在尝试并获得例如从KeyCloak进入.well-known / openid-configuration,我得到连接被拒绝的错误:

root @ 0e77e9623717:/ app#curl https://keycloak:18443/auth/realms/myrealm/.well-known/openid-configuration curl:(7)无法连接到密钥斗篷端口18443:连接被拒绝

从文档中我发现,我需要在KeyCloak上启用SSL,但是整个过程有点混乱,而且不清楚要使用哪个域作为证书...

如果有人对我这样的情况有任何经验并可以分享,那就太好了!

1 个答案:

答案 0 :(得分:1)

不清楚如何配置integration-test网络以及在哪里运行集成测试(主机,容器)以获取确切答案。

但是我尝试。从主机访问密钥斗篷:

https://<host IP or name>:18443/ 

integration-test网络中的容器中:

https://keycloak:8443/

因此,请尝试配置test-web-api

IDENTITY_SERVER_URL=https://keycloak:8443/auth/realms/myrealm

并且您的test-web-api应该可以访问密钥斗篷。