我有一个特定的用例,我们希望每天向Keycloak询问所有用户以及每个用户的组和角色。用于与其他内部系统进行对帐。
目前,我们正在使用UsersResource中提供的Keycloak端点。但是我们发现每次调用之后性能都会降低,我们不能再使用此解决方案了。该领域有超过30K的用户。
我们也看到Keycloak可以导出数据库,但仅限于系统启动(我猜是出于迁移目的)。鉴于我们想要每天提取所有用户,我们无法使用它。
是否有一些已知的功能或解决方法?
答案 0 :(得分:5)
我已经通过docker使用并行启动容器完成了该任务,该容器连接到现有的keycloak数据库。
请使用与真正的keacloak相同版本的容器密钥斗篷。 由于版本之间的数据库架构差异。
导出
docker run --rm\
--name keycloak_exporter\
-v /tmp:/tmp/keycloak-export:Z\
-e POSTGRES_DATABASE=keycloak\
-e POSTGRES_PASSWORD=PASSOWRD_PLEASE\
-e POSTGRES_USER=keycloak\
-e DB_VENDOR=POSTGRES\
-e POSTGRES_PORT_5432_TCP_ADDR=postgresql.local\
jboss/keycloak:3.4.3.Final\
-Dkeycloak.migration.action=export\
-Dkeycloak.migration.provider=dir\
-Dkeycloak.migration.dir=/tmp/keycloak-export\
-Dkeycloak.migration.usersExportStrategy=SAME_FILE\
-Dkeycloak.migration.realmName=therealm
导入
docker run --rm\
--name keycloak_importer\
-v /tmp:/tmp/keycloak-import:Z\
-e POSTGRES_DATABASE=keycloak_dest\
-e POSTGRES_PASSWORD=PASSOWRD_DEST_PLEASE\
-e POSTGRES_USER=keycloak\
-e DB_VENDOR=POSTGRES\
-e POSTGRES_PORT_5432_TCP_ADDR=postgresql2.local\
jboss/keycloak:3.4.3.Final\
-Dkeycloak.migration.action=import\
-Dkeycloak.migration.provider=dir\
-Dkeycloak.migration.dir=/tmp/keycloak-import\
-Dkeycloak.migration.strategy=IGNORE_EXISTING\
-Dkeycloak.migration.usersExportStrategy=SAME_FILE\
-Dkeycloak.migration.realmName=therealm
答案 1 :(得分:2)
您需要在docker-compose-yml中绑定您的文件夹,而不仅是领域json文件,如下所示:
keycloak:
image: jboss/keycloak:8.0.1
container_name: "keycloak"
volumes:
- ./realms/:/tmp/
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=admin
- KEYCLOAK_IMPORT=/tmp/realm-export.json -Dkeycloak.profile.feature.upload_scripts=enabled
领域是yaml文件旁边的文件夹。此时,您可以像往常一样使用基本realm-export.json运行docker-compose up -d,进入管理面板,添加具有凭据和角色的用户,然后使用此命令可以导出整个配置:
docker exec -it keycloak /opt/jboss/keycloak/bin/standalone.sh -Djboss.socket.binding.port-offset=100 -Dkeycloak.migration.action=export -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.realmName=ed-realm -Dkeycloak.migration.usersExportStrategy=REALM_FILE -Dkeycloak.migration.file=/tmp/export.json
您将在realms文件夹中看到将创建一个新文件,该文件将包含整个配置,因此您可以运行docker-compose down,用此新文件替换旧文件,然后再次运行docker-compose up作为您需要很多次,并在重新更改领域时重做该过程。