如何使用嵌入式密钥斗篷进行完整导出(包括用户)

Posted

技术标签:

【中文标题】如何使用嵌入式密钥斗篷进行完整导出(包括用户)【英文标题】:How to do a full export (including users) with embedded keycloak 【发布时间】:2021-07-18 16:38:06 【问题描述】:

我有一个使用嵌入式 keycloak 的 Springboot 应用程序。

我正在寻找一种从中加载 keycloak 服务器、更改配置、添加用户然后导出这个新版本的 keycloak 的方法。

This question 得到了有关如何进行部分导出的答案,但我在 Keycloak Admin REST API 的文档中找不到有关如何进行完全导出的任何内容。

使用独立的 keycloak 服务器,我可以简单地使用 CLI 并键入

-Dkeycloak.migration.action=export -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file=/tmp/keycloak-dump.json

但这是嵌入式版本。

这很可能是微不足道的,因为我知道新创建的用户必须存储在某个地方。

我添加了一个用户,但重新启动应用程序并没有将其删除,因此 keycloak 以某种方式将其持久化。但是我用于 keycloak 服务器和领域设置的 json 文件没有改变。

因此,在没有独立服务器的情况下无法访问 CLI,也没有用于完整导出的 REST 端点,我如何加载服务器、进行一些更改并通过导出生成新的 json,我可以简单地将其放入我的 Spring 应用程序代替?

【问题讨论】:

【参考方案1】:

您可以使用以下命令进行完整导出(如果 Springboot 与 Docker 容器一起使用):

[podman | docker] exec -it <pod_name> opt/jboss/keycloak/bin/standalone.sh
    -Djboss.socket.binding.port-offset=<interger_value> Docker recommend  an offset of 100 at least
    -Dkeycloak.migration.action=[export | import]
    -Dkeycloak.migration.provider=[singleFile | dir]
    -Dkeycloak.migration.dir=<DIR TO EXPORT TO> Use only iff .migration.provider=dir
    -Dkeycloak.migration.realmName=<REALM_NAME_TO_EXPORT>
    -Dkeycloak.migration.usersExportStrategy=[DIFFERENT_FILES | SKIP | REALM_FILE | SAME_FILE]
    -Dkeycloak.migration.usersPerFile=<integer_value> Use only iff .usersExportStrategy=DIFFERENT_FILES
    -Dkeycloak.migration.file=<FILE TO EXPORT TO>

我正在创建一个带有文档的开源 keycloak 示例;您可以在我的company's GitHub 中查看有关导入/导出的完整指南。

【讨论】:

以上是关于如何使用嵌入式密钥斗篷进行完整导出(包括用户)的主要内容,如果未能解决你的问题,请参考以下文章

添加声明以访问令牌密钥斗篷

使用 Keycloak 颁发“API 密钥”

代表客户端验证密钥斗篷不记名令牌

基于 Angular 角色的身份验证密钥斗篷和 Spring Boot

反向代理背后的密钥斗篷

登录密钥斗篷后撤销刷新令牌