Keycloak Docker 导入用户

10

摘要

我需要一个预配置的Keycloak实例在测试期间被自动部署
将用户导入到Keycloak似乎是一个挑战。

方法

我创建了一个带有预定义Realm / Users / Clients的Docker容器。
使用导出/导入功能,我可以轻松地重建具有客户端的Realm,但无法重建Users。
明确一点,用户显示在JSON文件中。因此,导出看起来合法。

绝望的尝试

我尝试过多种方法,包括但不限于:

  1. ENV KEYCLOAK_IMPORT my-realm.json 在docker文件中 => Realm ✔ Clients ✔ Users ✖

未创建用户,但在工作流方面完美无缺。它在docker构建期间运行。

  1. 通过docker exec ... action=import导入 => Realm ✔ Clients ✔ Users ✖
docker exec -it <id> /opt/jboss/keycloak/bin/standalone.sh -Djboss.socket.binding.port-offset=100 -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.realmName=myrealm -Dkeycloak.migration.file=/tmp/my-realm.json
  1. 将用户和提供者的策略设置为 singleFile ,并将其命名为 Strategy: OVERWRITE_EXISTING,以便一次性完成所有操作。
  2. 通过管理控制台手动导入,Realm ✖ Clients ✔ Users ✔

Keycloak console screenshot

很明显这不适合自动化,但我 JSON 格式的用户可以被导入。

因此

是否存在某些像 KEYCLOAK_FULL_IMPORT 这样的代码环境变量,可以在 Dockerfile 中一次性完成所有操作?


2
创建一个带有预配置的测试Keycloak数据库的DB Docker镜像,然后将Keycloak和DB容器一起运行怎么样? - solveMe
@solveMe 那确实可能行得通。 - MonoThreaded
1个回答

7
我承认这是我Dockerfile中的一个愚蠢的打字错误。简而言之,我从错误文件中复制了内容。正确的配置应该像这样:
FROM jboss/keycloak:latest

COPY my-realm.json /tmp/my-realm.json

ENV KEYCLOAK_USER admin
ENV KEYCLOAK_PASSWORD admin

ENV DB_VENDOR h2

ENV KEYCLOAK_IMPORT /tmp/my-realm.json

这个错误是在 COPY some-realm.json /tmp/my-realm.json 中,其中 some-realm.json 实际上没有包含用户信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接