Keycloak
1 前言
一个问题,一篇文章,一出故事。
上面的章节,我们完成了KeyCloak Realm的导出,本章将实现导出不到Client的Realm配置。
2 最佳实践
2.1 导出的步骤
2.1.1 停止 Keycloak 服务(导出/导入必须停服务)
systemctl stop keycloak
2.1.2 创建备份目录
mkdir -p /data/backup/
2.1.3 导出旧Realm不含用户数据)
kc.sh export --realm cmdschoolGroup --dir /data/backup/ --users skip
2.2 导入的步骤
2.2.1 备份原始导出文件,防止改错
cp /data/backup/cmdschoolGroup-realm.json /data/backup/cmdschoolGroup-realm.json.default
2.2.2 一键清洗 JSON
jq '
# 1. 全局删除所有id字段(安全无副作用)
del(.. | .id?)
# 2. 删除根节点三大整块数据
| del(.clients)
| del(.roles)
| del(.groups)
# 3. 所有scopeMappings下的roles强制置空数组,禁止删除
| walk(
if type == "object" and has("scopeMappings") then
.scopeMappings |= map( .roles = [] )
else . end
)
# 4. 所有clientScopes里的roles置空
| walk(
if type == "object" and has("clientScopes") then
.clientScopes |= map( if has("roles") then .roles = [] else . end )
else . end
)
# 5. 复合角色composites.roles置空
| walk(
if type == "object" and has("composites") and (.composites | has("roles")) then
.composites.roles = []
else . end
)
# 6. 修改领域名称
| .realm = "cmdschoolConnect"
' /data/backup/cmdschoolGroup-realm.json > /data/backup/cmdschoolConnect-realm.json
需要注意的是,以上完成以下操作
– 删除所有ID
– 删除客户端和客户端相关的角色和组
– 将realm名称改为cmdschoolConnect
2.2.3 验证JSON格式是否正常(无报错即合法)
jq . /data/backup/cmdschoolConnect-realm.json
2.2.4 导入新Realm
kc.sh import \ --file /data/backup/cmdschoolConnect-realm.json \ --db=mariadb \ --db-url=jdbc:mariadb://rhbkdb01.cmdschool.org:3306/keycloak \ --db-username=keycloak \ --db-password=keycloakpwd \ --override=true | tee -a ~/kc.sh_import.txt
2.2.5 启动Keycloak
systemctl start keycloak
没有评论