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 是微软基于 LDAP 的软件,用于在 Windows 系统中提供目录存储服务。如果您的组织使用微软 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. 在左侧导航栏,点击 Users > IDPs
  2. 点击 Add 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 Service Configuration Validation 部分:

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

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

NOTE

添加 LDAP 后:

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

LDAP 配置示例

LDAP Connector 配置示例

以下示例展示如何配置 LDAP connector:

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. 基本过滤:查找所有用户
(&(objectClass=person))

# 2. 多条件组合:查找特定部门用户
(&(objectClass=person)(departmentNumber=1000))

# 3. 查找启用用户(Active Directory)
(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

# 4. 查找特定邮箱域用户
(&(objectClass=person)(mail=*@example.com))

# 5. 查找特定组成员
(&(objectClass=person)(memberOf=cn=developers,ou=groups,dc=example,dc=com))

# 6. 查找最近登录用户(Active Directory)
(&(objectClass=user)(lastLogon>=20240101000000.0Z))

# 7. 排除系统账号
(&(objectClass=person)(!(uid=admin))(!(uid=system)))

# 8. 查找具有特定属性的用户
(&(objectClass=person)(mobile=*))

# 9. 查找多个部门用户
(&(objectClass=person)(|(ou=IT)(ou=HR)(ou=Finance)))

# 10. 复杂条件组合示例
(&
  (objectClass=person)
  (|(department=IT)(department=Engineering))
  (!(title=Intern))
  (manager=cn=John Doe,ou=People,dc=example,dc=com)
)

组搜索配置示例

# 1. 基本过滤:查找所有组
(objectClass=groupOfNames)

# 2. 查找特定前缀组
(&(objectClass=groupOfNames)(cn=dev-*))

# 3. 查找非空组
(&(objectClass=groupOfNames)(member=*))

# 4. 查找具有特定成员的组
(&(objectClass=groupOfNames)(member=uid=john,ou=People,dc=example,dc=com))

# 5. 查找嵌套组(Active Directory)
(&(objectClass=group)(|(groupType=-2147483646)(groupType=-2147483644)))

# 6. 查找具有特定描述的组
(&(objectClass=groupOfNames)(description=*admin*))

# 7. 排除系统组
(&(objectClass=groupOfNames)(!(cn=system*)))

# 8. 查找具有特定成员的组
(&(objectClass=groupOfNames)(|(cn=admins)(cn=developers)(cn=operators)))

# 9. 查找特定 OU 下的组
(&(objectClass=groupOfNames)(ou=IT))

# 10. 复杂条件组合示例
(&
  (objectClass=groupOfNames)
  (|(cn=prod-*)(cn=dev-*))
  (!(cn=deprecated-*))
  (owner=cn=admin,dc=example,dc=com)
)

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

# AND 操作符 (&) - 所有条件必须满足
# 语法: (&(condition1)(condition2)(condition3)...)

# 多属性 AND 示例
(&
  (objectClass=person)
  (mail=*@example.com)
  (title=Engineer)
  (manager=*)
)

# OR 操作符 (|) - 至少满足一个条件
# 语法: (|(condition1)(condition2)(condition3)...)

# 多属性 OR 示例
(|
  (department=IT)
  (department=HR)
  (department=Finance)
)

# AND 与 OR 结合
(&
  (objectClass=person)
  (|
    (department=IT)
    (department=R&D)
  )
  (employeeType=FullTime)
)

# 复杂条件组合
(&
  (objectClass=person)
  (|
    (&
      (department=IT)
      (title=*Engineer*)
    )
    (&
      (department=R&D)
      (title=*Developer*)
    )
  )
  (!(status=Inactive))
  (|(manager=*)(isManager=TRUE))
)

同步 LDAP 用户

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

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

注意

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

  • 从 LDAP 删除的用户,同步后状态为 Invalid

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

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

操作步骤

  1. 在左侧导航栏,点击 Users > IDPs

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

  3. 点击右上角的 Actions > Sync user

  4. 点击 Sync

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

相关操作

您可以在列表页右侧点击 或在详情页右上角点击 Actions,根据需要更新或删除 LDAP。

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

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

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