
adorsys/keycloak-config-clikeycloak-config-cli是一个Keycloak实用工具,用于基于JSON/YAML文件确保领域的期望配置状态。JSON/YAML文件格式基于导出的领域格式,可像管理代码一样在Git中存储和处理配置文件,无需重启Keycloak即可应用配置。
配置文件基于Keycloak导出文件格式,可用于重新导入设置。建议保持文件精简,移除所有UUID和Keycloak默认设置的内容。
moped.json是一个完整的示例配置文件,其他示例位于测试资源目录中。
keycloak-config-cli支持配置文件的变量替换功能,可通过import.var-substitution.enabled=true启用(默认禁用)。
Spring Boot公开的变量(通过配置树或外部配置)可通过$(property.name)访问。
此外,字符串替换支持多种前缀用于不同场景:
Base64解码器: $(base64Decoder:SGVsbG9Xb3JsZCE=) Base64编码器: $(base64Encoder:HelloWorld!) Java常量: $(const:java.awt.event.KeyEvent.VK_ESCAPE) 日期: $(date:yyyy-MM-dd) DNS: $(dns:address|apache.org) 环境变量: $(env:USERNAME) 文件内容: $(file:UTF-8:src/test/resources/document.properties) Java信息: $(java:version) 本地主机: $(localhost:canonical-name) 属性文件: $(properties:src/test/resources/document.properties::mykey) 资源包: $(resourceBundle:org.example.testResourceBundleLookup:mykey) 脚本: $(script:javascript:3 + 4) 系统属性: $(sys:user.dir) URL解码器: $(urlDecoder:Hello%20World%21) URL编码器: $(urlEncoder:Hello World!) URL内容(HTTP): $(url:UTF-8:[***] URL内容(HTTPS): $(url:UTF-8:[***] URL内容(文件): $(url:UTF-8:file:///$(sys:user.dir)/src/test/resources/document.properties) XML XPath: $(xml:src/test/resources/document.xml:/root/path/to/node)
用于替换Java系统属性或环境变量的值。如果import.var-substitution.enabled设为true,默认启用递归变量替换,如$(file:UTF-8:$(env:KEYCLOAK_PASSWORD_FILE))。
变量替换在JSON解析器执行前运行,支持JSON结构或复杂值。
有关更多信息和高级用法,请参见Apache Common StringSubstitutor文档。
注意:变量替换是keycloak-config-cli的一部分,在本地完成。这意味着环境变量需要在执行keycloak-config-cli的环境中可用。
如果设置了import.var-substitution.prefix=${和import.var-substitution.suffix=}(keycloak-config-cli 3.x中的默认值),则Keycloak内置变量(如${role_uma_authorization})需要使用$${role_uma_authorization}进行转义。
keycloak-config-cli支持JSON格式日志。要启用,请设置SPRING_PROFILES_ACTIVE=json-log。
| CLI选项 | 环境变量 | 描述 | 默认值 |
|---|---|---|---|
| --logging.level.root | LOGGING_LEVEL_ROOT | 定义根日志级别 | info |
| --logging.level.keycloak-config-cli | LOGGING_LEVEL_KEYCLOAKCONFIGCLI | keycloak-config-cli组件的日志级别 | 继承logging.level.root的值 |
| --logging.level.http | LOGGING_LEVEL_HTTP | keycloak-config-cli与Keycloak之间的HTTP请求日志级别 | 继承logging.level.root的值 |
| --logging.level.realm-config | LOGGING_LEVEL_REALMCONFIG | 如果设为trace,将记录包含敏感信息的领域配置 | 继承logging.level.root的值 |
参见:docs/FEATURES.md
从keycloak-config-cli 4.0开始,将支持Keycloak的最新4个版本(如可能)。存在一些例外情况:
Docker镜像可在DockerHub(docker.io/adorsys/keycloak-config-cli)和quay.io(quay.io/adorsys/keycloak-config-cli)获取。
| 标签 | 描述 |
|---|---|
latest | keycloak-config-cli的最新可用版本,基于最新支持的Keycloak版本构建 |
latest-x.y.z | keycloak-config-cli的最新可用版本,基于Keycloak版本x.y.z构建 |
edge | main分支的最新提交,基于最新支持的Keycloak版本构建 |
a.b.c | keycloak-config-cli版本a.b.c,基于最新支持的Keycloak版本构建 |
a.b.c-x.y.z | keycloak-config-cli版本a.b.c,基于Keycloak版本x.y.z构建 |
maven | 包含源代码,可在运行时编译keycloak-config-cli |
此外,maven标签包含源代码,可在运行时编译keycloak-config-cli。这有助于使用非官方支持的Keycloak版本运行keycloak-config-cli,例如:
bashdocker run --rm -ti -v $PWD:/config/ -eKEYCLOAK_VERSION=23.0.1 -eMAVEN_CLI_OPTS="-B -ntp -q" adorsys/keycloak-config-cli:edge-build
对于Docker环境变量,需要将点替换为下划线。
shelldocker run \ -e KEYCLOAK_URL="http://<your keycloak host>:8080/" \ -e KEYCLOAK_USER="<keycloak admin username>" \ -e KEYCLOAK_PASSWORD="<keycloak admin password>" \ -e KEYCLOAK_AVAILABILITYCHECK_ENABLED=true \ -e KEYCLOAK_AVAILABILITYCHECK_TIMEOUT=120s \ -e IMPORT_FILES_LOCATIONS='/config/*' \ -v <your config path>:/config \ adorsys/keycloak-config-cli:latest
您可以通过以下命令构建自己的Docker镜像:
shelldocker build -t keycloak-config-cli .
| CLI选项 | 环境变量 | 描述 | 默认值 | 文档 |
|---|---|---|---|---|
| --keycloak.url | KEYCLOAK_URL | Keycloak URL,包括Web上下文。格式:scheme://hostname:port/web-context | - | |
| --keycloak.user | KEYCLOAK_USER | 登录用户名 | admin | |
| --keycloak.password | KEYCLOAK_PASSWORD | 登录用户密码 | - | |
| --keycloak.client-id | KEYCLOAK_CLIENTID | 登录客户端ID | admin-cli | |
| --keycloak.client-secret | KEYCLOAK_CLIENTSECRET | 登录客户端密钥 | - | |
| --keycloak.grant-type | KEYCLOAK_GRANTTYPE | 登录授权类型 | password | |
| --keycloak.login-realm | KEYCLOAK_LOGINREALM | 登录领域 | master | |
| --keycloak.ssl-verify | KEYCLOAK_SSLVERIFY | 验证到Keycloak的SSL连接 | true | |
| --keycloak.http-proxy | KEYCLOAK_HTTPPROXY | 通过HTTP代理连接到Keycloak。格式:scheme://hostname:port | - | |
| --keycloak.connect-timeout | KEYCLOAK_CONNECTTIMEOUT | 连接超时 | 10s | |
| --keycloak.read-timeout | KEYCLOAK_READTIMEOUT | 读取超时 | 10s | 配置为Java Duration |
| --keycloak.availability-check.enabled | KEYCLOAK_AVAILABILITYCHECK_ENABLED | 等待Keycloak可用 | false | |
| --keycloak.availability-check.timeout | KEYCLOAK_AVAILABILITYCHECK_TIMEOUT | Keycloak可用性检查的等待超时 | 120s |
| CLI选项 | 环境变量 | 描述 | 默认值 | 文档 |
|---|---|---|---|---|
| --import.validate | IMPORT_VALIDATE | 验证配置设置 | false | |
| --import.parallel | IMPORT_PARALLEL | 启用某些资源的并行导入 | false | |
| --import.files.locations | IMPORT_FILES_LOCATIONS | 配置文件位置(URL、文件路径或Ant风格模式) | - | IMPORT.md |
| --import.files.include-hidden-files | IMPORT_FILES_INCLUDE_HIDDEN_FILES | 包含标记为隐藏的文件 | false | |
| --import.files.excludes | IMPORT_FILES_EXCLUDES | 使用Ant风格模式排除文件 | - | |
| --import.cache.enabled | IMPORT_CACHE_ENABLED | 启用导入文件位置的缓存 | true | |
| --import.cache.key | IMPORT_CACHE_KEY | 导入配置的缓存键 | default | |
| --import.remote-state.enabled | IMPORT_REMOTESTATE_ENABLED | 启用远程状态管理。仅清除由keycloak-config-cli管理的资源 | true | MANAGED.md |
| --import.remote-state.encryption-key | IMPORT_REMOTESTATE_ENCRYPTIONKEY | 启用加密格式的远程状态。如果未设置,状态将以明文存储 | - | |
| --import.var-substitution.enabled | IMPORT_VARSUBSTITUTION_ENABLED | 启用配置文件的变量替换 | false | |
| --import.var-substitution.nested | IMPORT_VARSUBSTITUTION_NESTED | 展开变量中的变量 | true | |
| --import.var-substitution.undefined-is-error | IMPORT_VARSUBSTITUTION_UNDEFINEDISTERROR | 如果变量未定义,则引发异常 | true | |
| --import.var-substitution.prefix | IMPORT_VARSUBSTITUTION_PREFIX | 如果import.var-substitution.enabled设为true,配置变量前缀 | $( | |
| --import.var-substitution.suffix | IMPORT_VARSUBSTITUTION_SUFFIX | 如果import.var-substitution.enabled设为true,配置变量后缀 | ) | |
| --import.behaviors.sync-user-federation | IMPORT_BEHAVIORS_SYNC_USER_FEDERATION | 启用用户联合的同步 | false |
启动本地Keycloak(端口8080):
shelldocker-compose down --remove-orphans && docker-compose up keycloak
然后执行以下命令:
shelljava -jar ./target/keycloak-config-cli.jar \ --keycloak.url=http://localhost:8080 \ --keycloak.ssl-verify=true \ --keycloak.user=admin \ --keycloak.password=admin123 \ --import.files.locations=./contrib/example-config/moped.json
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务