【问题标题】:Keycloak Docker HTTPS required需要 Keycloak Docker HTTPS
【发布时间】:2018-09-26 07:07:24
【问题描述】:

我已经在我的 Digital Ocean Docker Droplet 上初始化了https://hub.docker.com/r/jboss/keycloak/

$docker run -e KEYCLOAK_USER=admin -e -p 8080:8080 KEYCLOAK_PASSWORD={password with upcase etc.} jboss/keycloak

成功

一切运行良好,服务器在 Droplets IP 地址的端口:8080 中启动。

当我从 URL 中的 UI 进入管理控制台时,问题就开始了。有一条消息:“需要 HTTPS”。这是一个真正的问题,我发现的唯一解决方案是从控制台登录 Keycloak,并在没有 UI 的情况下从管理控制台更改 HTTPS=required 的设置。

然后我为我的 Docker 容器打开了 bash:

$docker exec -it keycloak bash

成功

当我输入命令登录 keycloak/bin 文件夹时:

cd keycloak/bin

keycloak/bin $./kcadm.sh config credentials --server http://<droplet IP>:8080/auth --realm master --user admin --password {password with upcase etc.}

bash 冻结并在一段时间后给出超时消息

从 bash 登录的原因如下:

keycloak/bin $ ./kcadm.sh update realms/master -s sslRequired=NONE

这有望解决所需 HTTPS 的原始问题。

【问题讨论】:

    标签: docker https keycloak


    【解决方案1】:

    发布端口 8443 (HTTPS) 并使用它而不是 8080 (HTTP):

    docker run \
      --name keycloak \
      -e KEYCLOAK_USER=myadmin \
      -e KEYCLOAK_PASSWORD=mypassword \
      -p 8443:8443 \
      jboss/keycloak
    

    Keycloak 在此设置中为 https 生成自签名证书。当然,这不是生产设置。


    更新

    为自己的 TLS 证书使用卷:

      -v /<path>/tls.crt:/etc/x509/https/tls.crt \
      -v /<path>/tls.key:/etc/x509/https/tls.key \
    

    【讨论】:

    • 当我尝试连接到https://localhost:8443/auth 时找不到,有什么想法吗?它也适用于 keycloak 2.5.5 吗?
    • 这个提示是金!他们应该把它放在文档中
    • @Edwin Keycloak 在 docker 容器运行后大约需要 1-2 分钟才能启动
    • 这不起作用。即使你等待1-2分钟。无法通过https://localhost:8443 访问。无法访问。
    • 对于想要通过将证书和密钥文件安装到 /etc/x509/https 目录并使用密码保护的密钥文件来运行 TLS 的任何人:请参阅 stackoverflow.com/a/60741019/2799606
    【解决方案2】:

    当使用 https://hub.docker.com/r/jboss/keycloak/ 作为起点并使用 DigitalOcean 作为服务提供商时,该解决方案还授予对管理控制台的访问权限,但没有安全性:

    启动容器:

    $ docker run {containerName}
    

    为容器打开 bash:

    $ docker exec -it {containerName} bash
    

    移至:

    $ cd keycloak/bin
    

    创建新的管理员用户:

    $ ./add-user-keycloak.sh --server http://{IP}:8080/admin    
    --realm master --user admin --password newpassword
    

    (不是很多地方建议的 add-user.sh)

    重新启动 DigitalOcean 等中的 droplet 以激活在关机前创建的管理员用户。重新启动 Droplet 登录后:

    $ ./kcadm.sh config credentials --server http://localhost:8080/auth 
    --realm master --user admin
    

    更改领域的 ssl 设置:

    $ ./kcadm.sh update realms/master -s sslRequired=NONE
    

    此解决方案不会创建任何安全性,但允许您访问管理控制台。

    在此之后建议开始工作: https://www.keycloak.org/docs/latest/server_installation/index.html#setting-up-https-ssl

    【讨论】:

    • 这不起作用,因为当你运行这个 ./kcadm.sh config credentials --server localhost:8080/auth --realm master --user admin 它给出错误 HTTPS REQUIRED
    【解决方案3】:

    以下命令序列对我有用

    在主机虚拟机上:

    docker run --name key -d -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak
    docker exec -it key bash
    

    容器内:

    cd keycloak/bin/
    ./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin 
    Logging into http://localhost:8080/auth as user admin of realm master
    Enter password: admin
    ./kcadm.sh update realms/master -s sslRequired=NONE
    

    【讨论】:

    • 感谢对我的测试服务器的帮助。但请在产品服务器上使用它:D
    【解决方案4】:

    以防万一有人想在 Docker Swarm 上使用它,使用秘密来存储证书文件和管理员凭据:

      keycloak:
        image: jboss/keycloak
        container_name: keycloak-server
        hostname: keycloak-server
        ports:
          - target: 8443 # Keycloak HTTPS port
            published: 8443
            mode: host
          - target: 8080 # Keycloak HTTP port
            published: 8080
            mode: host
        networks: 
          default:
            aliases: 
              - keycloak-server
        deploy:
          replicas: 1
        secrets:
          - keycloak_user_file
          - keycloak_password_file
          - source: server_crt
            target: /etc/x509/https/tls.crt
            uid: '103'
            gid: '103'
            mode: 0440
          - source: server_key
            target: /etc/x509/https/tls.key
            uid: '103'
            gid: '103'
            mode: 0440
        environment: 
          - KEYCLOAK_USER_FILE=/run/secrets/keycloak_user_file
          - KEYCLOAK_PASSWORD_FILE=/run/secrets/keycloak_password_file
    
    secrets:
      server_crt:
        file: ./certs/server.crt
      server_key:
        file: ./certs/server.key
      keycloak_user_file:
        file: ./keycloak/adminuser
      keycloak_password_file:
        file: ./keycloak/adminpassword
    

    【讨论】:

      【解决方案5】:

      在 Jboss/Keyclok 12.0.0 之后更新

      在服务器中使用以下命令,无需通过 bash 登录到 docker 容器。

      $ docker exec <container_id> /opt/jboss/keycloak/bin/kcadm.sh update realms/master -s sslRequired=NONE --server http://localhost:8080/auth --realm master --user <admin_username> --password <admin_password>
      

      以域主管理员用户身份登录 http://localhost:8080/auth

      【讨论】:

        【解决方案6】:

        我在尝试配置凭据时也遇到了 bash 冻结。

        --password 参数添加到config credentials 命令导致成功执行:

        ./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password {YOUR_PASSWORD_HERE}
        

        执行 ./kcadm.sh config credentials 以获取传递参数的安全/替代方法示例。

        【讨论】:

          【解决方案7】:

          适用于使用 Docker 构建 Keycloak 的情况。这对我有用:

          docker exec -it demo-keycloak bash
          /opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm realmname --user admin --password admin 
          /opt/jboss/keycloak/bin/kcadm.sh update realms/realmname -s sslRequired=NONE
          

          说明: 第一行在 Keycloak 容器上提供了一个交互式 bash shell。 第二行和第三行使用 Keycloak admin-cli 对您进行身份验证并修改领域设置。容器无需重启

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-05-03
            • 2015-08-17
            • 1970-01-01
            • 2023-02-08
            • 2017-07-11
            • 2019-09-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多