Keycloak - 将用户与 LDAP 同步的问题

Posted

技术标签:

【中文标题】Keycloak - 将用户与 LDAP 同步的问题【英文标题】:Keycloak - Issues syncing users with LDAP 【发布时间】:2020-03-13 20:14:09 【问题描述】:

我在服务器上安装了 Openldap,然后将用户添加到 ldap 中,下面的屏幕显示通过 Apache Active Directory 显示添加的用户

现在在 keycloak 中,我将用户联合添加为 openLdap,并将其连接到 ldap 没有任何问题,但是当我尝试同步用户时,我收到了消息

成功!用户同步成功完成。 0个导入用户,0个 更新用户

所以没有用户从ldap导入keycloak,下面是keycloak中相关的ldap连接信息。

【问题讨论】:

【参考方案1】:

感谢@EricLavault 和一位公司同事,Keycloak 终于能够成功导入用户。以下是我为解决此问题所做的更改。

    更改User Object Classes=* 创建了一个新条目ou=People,然后在其下创建了用户 在 Keycloak 中使用 Users DN = ou=user,ou=people,dc=suredev20

在此之后它开始抛出异常

错误 [org.keycloak.storage.ldap.LDAPStorageProviderFactory](默认 task-1931) 从 LDAP 导入用户时失败: org.keycloak.models.ModelException:从 LDAP 返回的用户为空 用户名!检查 LDAP 映射的配置。映射的用户名 LDAP 属性:uid,用户 DN: cn=subodh123,ou=user,ou=People,dc=suredev20,来自 LDAP 的属性: sn=[joshi123], cn=[subodh123], createTimestamp=[20191118180647Z], modifyTimestamp=[20191118180647Z]

通过使用Username LDAP attribute = cn作为ldap用户名修复了openldap情况下的属性描述默认cn

【讨论】:

【参考方案2】:

用户条目未正确存储在您的目录中。事实上,您不应该将cn=root 用作容器,因为它应该代表目录管理器,并且应该用于绑定和其他操作,但不能用于构建目录。

相反,您应该使用ou=people,dc=suredev20 的默认用户容器(至少对于 OpenLDAP 和 Apache DS),即。你需要移动cn=subodh

来自cn=subodh,ou=user,cn=root,dc=suredevcn=subodh,ou=people,dc=suredev20

此外,在 Keycloack 中,您需要相应地设置 users dnou=people,dc=suredev20 (您可以尝试使用ou=user,cn=root,dc=suredev 而不移动subodh 条目,但不推荐)。

【讨论】:

ou=user,cn=root,dc=suredev20 我试过但还是没有用户导入 这就是我所怀疑的,您需要将cn=root,dc=suredev 保留为叶条目并在目录中的其他位置填充用户,例如。就像ou=people,dc=suredev20 中的建议一样,但不是强制性的。 将发布我必须为此做的更改,我要问的是如何将任何默认角色/组分配给导入到 keycloak 的用户? @SubodhJoshi 请帮我们解答,我也遇到同样的错误。 @MuddesirAhmed 你的问题是什么?

以上是关于Keycloak - 将用户与 LDAP 同步的问题的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak:将 ldap 组映射到 springboot 角色

keycloak 到 keycloak 数据同步

与 LDAP 的 Keycloak 联合无法建立连接:错误!尝试连接到 LDAP 时出错。有关详细信息,请参阅 server.log

Confluence 6 在你的 LDAP 目录中优化用户和用户组数量

Confluence 6 在你的 LDAP 目录中优化用户和用户组数量

将关系数据库中组织机构同步至LDAP中