是否有一种优雅的方法可以为多租户应用程序克隆 Keycloak 领域及其所有配置(客户端和角色)?

问题描述 投票:0回答:3

我正在构建一个多租户应用程序,并使用 Keycloak 进行身份验证和授权。

对于每个租户,我们的想法是拥有一个专用的 Keycloak 领域。每个租户将拥有完全相同的角色和客户。

我尝试导出一个现有领域,将其用作模板并将其导入新租户。问题:由于内部 ID,我面临数据库约束违规。

问题:有没有一种优雅的方法来实现这一点,有一个模板来创建一个新领域?

keycloak
3个回答
8
投票
  • 确保上传脚本功能已启用。对于使用 docker-compose 的部署,只需添加以下内容:

      command: -Dkeycloak.profile.feature.upload_scripts=enabled      
    
  • 导出您的领域(用作模型的领域)

  • 删除所有包含

    "id":
    "_id":
    "containerId":

    的行
  • 搜索模板领域名称并将其替换为新领域名称

  • 在 Keycloak UI 管理控制台中,添加新领域,提供文件即可。

您可以使用清理后的导出文件作为模板。


2
投票

由于代表无法发表评论, 但我想补充@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


1
投票

您可以做的是使用 Keycloak Terraform 提供程序配置所有内容。这样,您只需在代码中定义一次配置,然后使用 Terraform 应用它。请参阅文档:https://registry.terraform.io/providers/mrparkers/keycloak/latest/docs

这样做的一个优点是,您可以将代码放入 SCM 工具(例如 git)中,这样您就可以跟踪您的更改,并在必要时返回到以前的版本。

© www.soinside.com 2019 - 2024. All rights reserved.