ldap - Keycloak 如何使用 User Federation 中定义的 LDAP 属性?

标签 ldap keycloak

在从 LDAP 提供程序设置用户联合时,存在三个 LDAP 属性:

  • 用户名 LDAP 属性
  • RDN LDAP 属性
  • UUID LDAP 属性

  • 其中每一个的值(value)如何影响 Keycloak 或同步过程?

    例如,如果目录确保唯一的电子邮件地址,使用邮件作为 UUID LDAP 属性是否有任何负面影响?

    我在哪里可以找到每个属性的详细信息——特定于 Keycloak?

    最佳答案

    在 Keycloak 管理控制台中,您可以将鼠标悬停在 LDAP 属性标签旁边的工具提示上 - 一个小问号 - 如果您需要尽可能多的信息。我在 Keycloak v6.0.1 上检查过这个,但我认为它适用于最新版本。此类工具提示通常会提供比您在 Keycloak 文档网站上找到的更多信息。有关这些属性的更多详细信息:

  • 用户名 LDAP 属性:映射为 Keycloak 用户名的 LDAP 属性名称。对于许多 LDAP 服务器供应商,它可以是“uid”。对于 Active Directory,它可以是“sAMAccountName”或“cn”。应该为要从 LDAP 导入 Keycloak 的所有 LDAP 用户记录填写该属性。所以你可以使用 mail如果您希望将其作为 Keycloak 中的用户名,则该属性。然后用户将使用他们的电子邮件地址登录 Keycloak。如果您 enable LDAP synchronization到 Keycloak 本地数据库(打开 Import Users ),这将作为用户名记录在那里。
  • RDN LDAP 属性:用作典型用户 DN 的 RDN(顶部属性)的 LDAP 属性名称。通常它与用户名 LDAP 属性相同,但不是必需的。例如,对于 Active Directory,当用户名属性可能是 'sAMAccountName' 时,通常使用 'cn' 作为 RDN 属性。例如,对于传统的 LDAP 目录(不是 Active Directory),其中用户 DN 通常是 uid=XXX,ou=people,dc=example,dc=com ,你会在那里使用'uid'。

  • [编辑 2019-05-31] 例如,当您在 Keycloak 中创建新用户时,实际上会使用 RDN 属性。如果您有 Edit Mode选项设置为 WRITABLE在设置中,Keycloak 将其同步回 LDAP 目录,即在 LDAP 中创建新用户条目。 为此,它需要(除其他外)RDN 和 Users DN (RDN 下方的另一个选项)以生成新用户 LDAP 条目的完整 DN。
  • UUID LDAP 属性:LDAP 属性的名称,用作 LDAP 中对象的唯一对象标识符 (UUID)。对于许多 LDAP 服务器供应商,它是“entryUUID”,但有些不同。例如,对于 Active Directory,它应该是“objectGUID”。如果您的 LDAP 服务器确实不支持 UUID 的概念,您可以使用任何其他属性,该属性在树中的 LDAP 用户中应该是唯一的。例如“uid”或“entryDN”。任何标准的 LDAP v3 目录都应该使用 entryUUID (OpenLDAP、OpenDJ...)。

  • 关于 LDAP 目录中 UUID 的最佳实践,您可以查看 RFC 4530标准。
    一般来说,我建议不要使用“邮件”作为 UUID,因为用户的“邮件”可能会改变(请参阅下面的原因),而条目 UUID(无论是否为用户条目)意味着是全局唯一的生成的数字(或至少包含这样的数字),通常在服务器端生成,并为条目一劳永逸地固定。 (此外,即使条目被删除,它也不能被重复使用,因为 UUID 在时间和空间上应该是唯一的。)特别是,它应该独立于任何用户的 变量 属性,如电子邮件地址。
    事实上,用户的电子邮件地址可能会由于各种原因在他/她在组织的一生中发生变化,仅举几例:
  • 用户——通常是女性——可能会结婚或离婚,因此可能会改变他们的姓氏。
  • 最高管理层决定重新命名公司并因此更改邮件域。
  • 该公司正在与另一家公司进行合并或收购,因此邮件域再次发生变化。

  • ...

    关于ldap - Keycloak 如何使用 User Federation 中定义的 LDAP 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56285741/

    相关文章:

    PHP ldap_bind() 身份验证 - 错误无法绑定(bind)到服务器 : Invalid credentials?

    c# - 如何将ldap请求更改为关系数据库?

    java - 使用未绑定(bind) ID 通过 SSL 绑定(bind)到 Active Directory

    java - 将配置传递给 Keycloak SPI Provider?

    java - 如何正确添加keycloak用户迁移提供商?

    c++ - C++ 中的 Windows LDAP 身份验证

    java - Spring data Ldap Repository 在使用 findAll 时返回 empry List

    keycloak - 使用 https keycloak 服务器设置仅 keycloak 承载客户端

    Keycloak 环境变量不起作用

    java - Keycloak java.lang.NoClassDefFoundError : java/security/acl/Group using Springboot