LDAP 管理

平台管理员可以在平台上添加、更新和删除 LDAP 服务。

LDAP 概述

LDAP(Lightweight Directory Access Protocol)是一种成熟、灵活且支持良好的标准机制,用于与目录服务器交互。它以分层树状结构组织数据,用于存储企业用户和组织信息,主要用于实现单点登录(SSO)。

NOTE

LDAP 主要特性:

  • 支持客户端与 LDAP 服务器之间的通信
  • 支持数据存储、检索和搜索操作
  • 提供客户端认证能力
  • 便于与其他系统集成

有关更多信息,请参阅 LDAP 官方文档

支持的 LDAP 类型

OpenLDAP

OpenLDAP 是 LDAP 的开源实现。如果您的组织使用开源 LDAP 进行用户认证,可以通过添加 LDAP 并配置相关参数,将平台配置为与 LDAP 服务通信。

NOTE

OpenLDAP 集成:

  • 支持平台对 LDAP 用户进行认证
  • 支持标准 LDAP 协议
  • 提供灵活的用户管理能力

有关 OpenLDAP 的更多信息,请参阅 OpenLDAP 官方文档

Active Directory

Active Directory 是 Microsoft 基于 LDAP 的软件,用于在 Windows 系统中提供目录存储服务。如果您的组织使用 Microsoft Active Directory 进行用户管理,可以将平台配置为与 Active Directory 服务通信。

NOTE

Active Directory 集成:

  • 支持平台对 AD 用户进行认证
  • 支持 Windows 域集成
  • 提供企业级用户管理能力

LDAP 术语

OpenLDAP 常用术语

术语描述示例
dc (Domain Component)域组件dc=example,dc=com
ou (Organizational Unit)组织单元ou=People,dc=example,dc=com
cn (Common Name)通用名称cn=admin,dc=example,dc=com
uid (User ID)用户 IDuid=example
objectClass (Object Class)对象类objectClass=inetOrgPerson
mail (Mail)邮箱mail=example@126.com
givenName (Given Name)givenName=xq
sn (Surname)sn=ren
objectClass: groupOfNames用户组objectClass: groupOfNames
member (Member)组成员属性member=cn=admin,dc=example,dc=com
memberOf用户组成员属性memberOf=cn=users,dc=example,dc=com

Active Directory 常用术语

术语描述示例
dc (Domain Component)域组件dc=example,dc=com
ou (Organizational Unit)组织单元ou=People,dc=example,dc=com
cn (Common Name)通用名称cn=admin,dc=example,dc=com
sAMAccountName/userPrincipalName用户标识符userPrincipalName=examplesAMAccountName=example
objectClass: userAD 用户对象类objectClass=user
mail (Mail)邮箱mail=example@126.com
displayName显示名称displayName=example
givenName (Given Name)givenName=xq
sn (Surname)sn=ren
objectClass: group用户组objectClass: group
member (Member)组成员属性member=CN=Admin,DC=example,DC=com
memberOf用户组成员属性memberOf=CN=Users,DC=example,DC=com

添加 LDAP

TIP

LDAP 集成成功后:

  • 用户可以使用企业账户登录平台
  • 多次添加同一个 LDAP 会覆盖之前同步的用户

前提条件

在添加 LDAP 之前,请准备以下信息:

  • LDAP 服务器地址
  • 管理员用户名
  • 管理员密码
  • 其他所需配置详情

操作步骤

  1. 在左侧导航栏中,单击 用户 > IDPs
  2. 单击 添加 LDAP
  3. 配置以下参数:

基本信息

参数描述
Server AddressLDAP 服务器访问地址,例如 192.168.156.141:31758
UsernameLDAP 管理员 DN,例如 cn=admin,dc=example,dc=com
PasswordLDAP 管理员账户密码
Login Box Username Prompt用户名输入提示信息,例如 “请输入用户名”

搜索设置

NOTE

搜索设置的用途:

  • 根据指定条件匹配 LDAP 用户条目
  • 提取关键用户和组属性
  • 将 LDAP 属性映射到平台用户属性
参数描述
Object Type用户的 ObjectClass:
- OpenLDAP:inetOrgPerson
- Active Directory:organizationalPerson
- 组:posixGroup
Login Field用作登录用户名的属性:
- OpenLDAP:mail(电子邮件地址)
- Active Directory:userPrincipalName
Filter Conditions用于用户/组筛选的 LDAP 过滤条件
示例:(&(cn=John*)(givenName=*xq*))
Search Starting Point用户/组搜索的 Base DN(例如 dc=example,dc=org
Search Scope搜索范围:
- sub:整个目录子树
- one:起始点下一级
Login Attribute唯一用户标识符:
- OpenLDAP:uid
- Active Directory:distinguishedName
Name Attribute对象名称属性(默认值:cn
Email Attribute邮箱属性:
- OpenLDAP:mail
- Active Directory:userPrincipalName
Group Member Attribute组成员标识符(默认值:uid
Group Attribute用户组关系属性(默认值:memberuid
  1. IDP 服务配置校验 部分:

    • 输入有效的 LDAP 账户用户名和密码
    • 用户名必须与 Login Field 设置匹配
    • 单击以验证配置
  2. (可选)配置 LDAP 自动同步策略

    • 启用 Auto-Sync Users 开关
    • 设置同步规则
    • 使用 在线工具 验证 CRON 表达式
  3. 单击 添加

NOTE

添加 LDAP 后:

  • 用户可以在同步前登录
  • 用户信息会在首次登录时自动同步
  • 自动同步会根据配置的规则执行

LDAP 配置示例

LDAP 连接器配置

以下示例展示了如何配置 LDAP 连接器:

apiVersion: dex.coreos.com/v1
kind: Connector
id: ldap        # Connector ID
name: ldap      # Connector display name
type: ldap      # Connector type is LDAP
metadata:
  name: ldap
  namespace: cpaas-system
spec:
  config:
    # LDAP server address and port
    host: ldap.example.com:636
    # DN and password for the service account used by the connector.
    # This DN is used to search for users and groups.
    bindDN: uid=serviceaccount,cn=users,dc=example,dc=com
    # Service account password, required when creating a connector.
    bindPW: password

    # Login account prompt. For example, username
    usernamePrompt: SSO Username

    # User search configuration
    userSearch:
      # Start searching from the base DN
      baseDN: cn=users,dc=example,dc=com
      # LDAP query statement, used to search for users.
      # For example: "(&(objectClass=person)(uid=<username>))"
      filter: (&(objectClass=organizationalPerson))

      # The following fields are direct mappings of user entry attributes.
      # User ID attribute
      idAttr: uid
      # Required. Attribute to map to email
      emailAttr: mail
      # Required. Attribute to map to username
      nameAttr: cn
      # Login username attribute
      # Filter condition will be converted to "(<attr>=<username>)", such as (uid=example).
      username: uid

      # Extended attributes
      # phoneAttr: phone

    # Group search configuration
    groupSearch:
      # Start searching from the base DN
      baseDN: cn=groups,dc=freeipa,dc=example,dc=com
      # Group filter condition
      # "(&(objectClass=group)(member=<user uid>))".
      filter: "(objectClass=group)"
      # User group matching field
      # Group attribute
      groupAttr: member
      # User group member attribute
      userAttr: uid
      # 组显示名称
      nameAttr: cn

用户过滤示例

# 1. Basic filter: Find all users
(&(objectClass=person))

# 2. Multiple conditions combination: Find users in a specific department
(&(objectClass=person)(departmentNumber=1000))

# 3. Find enabled users (Active Directory)
(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

# 4. Find users with a specific email domain
(&(objectClass=person)(mail=*@example.com))

# 5. Find members of specific group
(&(objectClass=person)(memberOf=cn=developers,ou=groups,dc=example,dc=com))

# 6. Find recently logged in users (Active Directory)
(&(objectClass=user)(lastLogon>=20240101000000.0Z))

# 7. Exclude system accounts
(&(objectClass=person)(!(uid=admin))(!(uid=system)))

# 8. Find users with a specific attribute
(&(objectClass=person)(mobile=*))

# 9. Find users in multiple departments
(&(objectClass=person)(|(ou=IT)(ou=HR)(ou=Finance)))

# 10. Complex condition combination example
(&
  (objectClass=person)
  (|(department=IT)(department=Engineering))
  (!(title=Intern))
  (manager=cn=John Doe,ou=People,dc=example,dc=com)
)

组搜索配置示例

# 1. Basic filter: Find all groups
(objectClass=groupOfNames)

# 2. Find groups with a specific prefix
(&(objectClass=groupOfNames)(cn=dev-*))

# 3. Find non-empty groups
(&(objectClass=groupOfNames)(member=*))

# 4. Find groups with a specific member
(&(objectClass=groupOfNames)(member=uid=john,ou=People,dc=example,dc=com))

# 5. Find nested groups (Active Directory)
(&(objectClass=group)(|(groupType=-2147483646)(groupType=-2147483644)))

# 6. Find groups with a specific description
(&(objectClass=groupOfNames)(description=*admin*))

# 7. Exclude system groups
(&(objectClass=groupOfNames)(!(cn=system*)))

# 8. Find groups with specific members
(&(objectClass=groupOfNames)(|(cn=admins)(cn=developers)(cn=operators)))

# 9. Find groups in a specific OU
(&(objectClass=groupOfNames)(ou=IT))

# 10. Complex condition combination example
(&
  (objectClass=groupOfNames)
  (|(cn=prod-*)(cn=dev-*))
  (!(cn=deprecated-*))
  (owner=cn=admin,dc=example,dc=com)
)

LDAP 过滤器中 AND(&) 和 OR(|) 操作符示例

# AND operator (&) - All conditions must be met
# Syntax: (&(condition1)(condition2)(condition3)...)

# Multiple attribute AND example
(&
  (objectClass=person)
  (mail=*@example.com)
  (title=Engineer)
  (manager=*)
)

# OR operator (|) - At least one condition must be met
# Syntax: (|(condition1)(condition2)(condition3)...)

# Multiple attribute OR example
(|
  (department=IT)
  (department=HR)
  (department=Finance)
)

# Combining AND and OR
(&
  (objectClass=person)
  (|
    (department=IT)
    (department=R&D)
  )
  (employeeType=FullTime)
)

# Complex condition combination
(&
  (objectClass=person)
  (|
    (&
      (department=IT)
      (title=*Engineer*)
    )
    (&
      (department=R&D)
      (title=*Developer*)
    )
  )
  (!(status=Inactive))
  (|(manager=*)(isManager=TRUE))
)

同步 LDAP 用户

将 LDAP 用户成功同步到平台后,您可以在用户列表中查看已同步的用户。

您可以在添加 LDAP 时配置自动同步策略(后续可以更新),也可以在成功添加 LDAP 后手动触发同步。以下介绍如何手动触发同步操作。

说明

  • 新增到平台集成 LDAP 中的用户可以在执行用户同步操作之前登录平台。成功登录平台后,其信息将自动同步到平台。

  • 从 LDAP 中删除的用户在同步后状态将变为 Invalid

  • 新同步用户的默认有效期为 Permanent

  • 与现有用户(本地用户、IDP 用户)同名的已同步用户会自动关联,其权限和有效期将与现有用户保持一致。它们可以使用各自来源对应的登录方式登录平台。

操作步骤

  1. 在左侧导航栏中,单击 用户 > IDPs

  2. 单击要手动同步的 LDAP 名称

  3. 在右上角单击 操作 > 同步用户

  4. 单击 同步

    说明:如果您手动关闭同步提示对话框,系统会弹出确认关闭的对话框。关闭同步提示对话框后,系统将继续同步用户。如果您停留在用户列表页,将收到同步结果反馈;如果离开用户列表页,则不会收到同步结果。

相关操作

您可以单击列表页右侧的 ,或在详情页右上角单击 操作,按需更新或删除 LDAP。

操作描述
更新 LDAP更新已添加 LDAP 的配置信息或 LDAP 自动同步策略

说明:更新 LDAP 后,通过此 LDAP 同步到平台的当前用户也会更新。从 LDAP 中移除的用户将在平台用户列表中变为无效。您可以执行清理无效用户的操作,以清理无用数据。
删除 LDAP删除 LDAP 后,通过此 LDAP 同步到平台的所有用户都将变为 Invalid 状态(用户与角色的绑定关系保持不变),且无法登录平台。重新集成后,需要重新执行同步以激活用户。

提示:删除 IDP 后,如果需要删除通过 LDAP 同步到平台的用户和用户组,请勾选提示框下方的复选框 Clean IDP Users and User Groups