Keycloak批量用户导入

3
有没有人有想法如何将大量用户导入Keycloak?
我们正在从2.5.5升级到4.0.0,并不得不从MongoDB切换到MySQL。我们已经能够导出我们的用户库,但是要将280k+用户重新导入Keycloak。导入过程需要25分钟才能导入500个用户的一个文件,这似乎并不实际,因为如果我们全天候工作,这将花费我们大约9/10天来导入用户库。
任何想法或建议都将不胜感激。

你有找到任何解决方案吗?我们现在也在为从外部数据库同步用户的性能而苦苦挣扎。似乎KC中的所有内容都导致了n+1问题... - malejpavouk
1
我们最终编写了一个自定义导入程序,直接将数据写入到一个全新的Keycloak MySQL表中。这有点麻烦,需要数月的故障排除和调整,但最终成功了。 - Chris Latta
如果有人在这里找答案的话,我们最终从Keycloak中获取了EntityManager(session.getProvider(JpaConnectionProvider.class).getEntityManager()),一次性加载了所有角色和组映射,从而解决了n+1问题。 - malejpavouk
2个回答

2

您可以使用Keycloak REST API和partialImport

首先,您需要获取访问令牌,您可以使用管理员用户或具有分配了manage-realm角色的客户端。

access_token=`curl http://localhost:8080/auth/realms/my-realm/protocol/openid-connect/token -XPOST -d 'grant_type=client_credentials' -u 'admin-client:admin-secret' | jq -r .access_token`


然后您可以导入一个用户数组。
curl -X POST -H "Authorization: Bearer $access_token"  -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"users":[{"username":"jose.perez","email":"jose.perez@gmail.com","firstName":"Jose","lastName":"Perez","emailVerified":true,"enabled":true,"ifResourceExists":"SKIP"}' http://localhost:8080/auth/admin/realms/my-realm/partialImport


我认为最新版本的Keycloak不可能做到这一点。我尝试过20.0版本。 - Lokesh
@Lokesh 文档提到的是 Keycloak 15。 - Azucena H
1
答案中的链接指向Keycloak 15文档返回404错误(https://www.keycloak.org/documentation-archive.html)。这是Keycloak 18的链接:https://www.keycloak.org/docs-api/18.0/rest-api/,目前最新的是21:https://www.keycloak.org/docs-api/21.1.1/rest-api/。请查找“从JSON文件部分导入到现有领域”或只需使用`partialImport`。 - mkczyk

2

2
更新链接:https://www.keycloak.org/docs/latest/server_admin/index.html#从导出的JSON文件导入域 - mabi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接