我正在构建一个多租户应用程序,并使用 Keycloak 进行身份验证和授权。
对于每个租户,我们的想法是拥有一个专用的 Keycloak 领域。每个租户将拥有完全相同的角色和客户。
我尝试导出一个现有领域,将其用作模板并将其导入新租户。问题:由于内部 ID,我面临数据库约束违规。
问题:有没有一种优雅的方法来实现这一点,有一个模板来创建一个新领域?
确保上传脚本功能已启用。对于使用 docker-compose 的部署,只需添加以下内容:
command: -Dkeycloak.profile.feature.upload_scripts=enabled
导出您的领域(用作模型的领域)
删除所有包含
"id":
、"_id":
和 "containerId":
的行
搜索模板领域名称并将其替换为新领域名称
在 Keycloak UI 管理控制台中,添加新领域,提供文件即可。
您可以使用清理后的导出文件作为模板。
由于代表无法发表评论, 但我想补充@Youssouf Maiga 的答案, 您还应该修改包含 "authenticationFlowBindingOverrides":
下的值的任何字段替换在“direct_grant”或“浏览器”下分配了值的所有条目 即
"authenticationFlowBindingOverrides": {
"direct_grant": "f5d1wb45e-27eb-4466-937439-9cc8a615ad65e",
"browser": "5b23141a1c-7af8d-410e-a9b451f-0eec12039c72e9"
},
替换为
"authenticationFlowBindingOverrides": {},
我尝试基于此克隆我的领域,并收到错误消息:
"Unable to resolve auth flow binding override for: direct_grant" when importing the modified realm export.
Keycloak版本16.1.1
您可以做的是使用 Keycloak Terraform 提供程序配置所有内容。这样,您只需在代码中定义一次配置,然后使用 Terraform 应用它。请参阅文档:https://registry.terraform.io/providers/mrparkers/keycloak/latest/docs
这样做的一个优点是,您可以将代码放入 SCM 工具(例如 git)中,这样您就可以跟踪您的更改,并在必要时返回到以前的版本。