LDAP 管理

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

LDAP 概述

LDAP(轻量级目录访问协议)是一种成熟、灵活且得到良好支持的标准机制,用于与目录服务器进行交互。它将数据组织成层次树结构,以存储企业用户和组织信息,主要用于实现单点登录(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 (域组件)域组件dc=example,dc=com
ou (组织单位)组织单位ou=People,dc=example,dc=com
cn (常用名)常用名cn=admin,dc=example,dc=com
uid (用户 ID)用户 IDuid=example
objectClass (对象类)对象类objectClass=inetOrgPerson
mail (邮件)邮件mail=example@126.com
givenName (名)givenName=xq
sn (姓)sn=ren
objectClass: groupOfNames用户组objectClass: groupOfNames
member (成员)组成员属性member=cn=admin,dc=example,dc=com
memberOf用户组成员属性memberOf=cn=users,dc=example,dc=com

Active Directory 常用术语

术语描述示例
dc (域组件)域组件dc=example,dc=com
ou (组织单位)组织单位ou=People,dc=example,dc=com
cn (常用名)常用名cn=admin,dc=example,dc=com
sAMAccountName/userPrincipalName用户标识符userPrincipalName=examplesAMAccountName=example
objectClass: userAD 用户对象类objectClass=user
mail (邮件)邮件mail=example@126.com
displayName显示名称displayName=example
givenName (名)givenName=xq
sn (姓)sn=ren
objectClass: group用户组objectClass: group
member (成员)组成员属性member=CN=Admin,DC=example,DC=com
memberOf用户组成员属性memberOf=CN=Users,DC=example,DC=com

添加 LDAP

TIP

LDAP 集成成功后:

  • 用户可以使用其企业账户登录平台
  • 多次添加相同的 LDAP 将覆盖先前同步的用户

前提条件

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

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

步骤

  1. 在左侧导航栏中,点击 用户 > 身份提供者(IDP)
  2. 点击 添加 LDAP
  3. 配置以下参数:

基本信息

参数描述
服务器地址LDAP 服务器访问地址(例如,192.168.156.141:31758
用户名LDAP 管理员 DN(例如,cn=admin,dc=example,dc=com
密码LDAP 管理员账户密码
登录框用户名提示用户名输入提示消息(例如,“请输入您的用户名”)

搜索设置

NOTE

搜索设置目的:

  • 根据指定条件匹配 LDAP 用户条目
  • 提取关键用户和组属性
  • 将 LDAP 属性映射到平台用户属性
参数描述
对象类型用户的 ObjectClass:
- OpenLDAP: inetOrgPerson
- Active Directory: organizationalPerson
- 组: posixGroup
登录字段用作登录用户名的属性:
- OpenLDAP: mail(电子邮件地址)
- Active Directory: userPrincipalName
筛选条件用户/组过滤的 LDAP 筛选条件
示例: (&(cn=John*)(givenName=*xq*))
搜索起始点用户/组搜索的基本 DN(例如,dc=example,dc=org
搜索范围搜索范围:
- sub: 整个目录子树
- one: 从起始点向下一级
登录属性唯一用户标识符:
- OpenLDAP: uid
- Active Directory: distinguishedName
名称属性对象名称属性(默认: cn
电子邮件属性电子邮件属性:
- OpenLDAP: mail
- Active Directory: userPrincipalName
组成员属性组成员标识符(默认: uid
组属性用户组关系属性(默认: memberuid
  1. 身份提供者(IDP)服务配置验证 部分:

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

    • 启用 自动同步用户 开关
    • 设置同步规则
    • 使用 在线工具 验证 CRON 表达式
  3. 点击 添加

NOTE

添加 LDAP 后:

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

LDAP 配置示例

LDAP 连接器配置

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

apiVersion: dex.coreos.com/v1
kind: Connector
id: ldap        # 连接器 ID
name: ldap      # 连接器显示名称
type: ldap      # 连接器类型为 LDAP
metadata:
  name: ldap
  namespace: cpaas-system
spec:
  config:
    # LDAP 服务器地址和端口
    host: ldap.example.com:636                         
    # 用于连接器的服务账户的 DN 和密码。
    # 此 DN 用于搜索用户和组。
    bindDN: uid=serviceaccount,cn=users,dc=example,dc=com 
    # 服务账户密码,创建连接器时必填。
    bindPW: password                         

    # 登录账户提示。例如,用户名
    usernamePrompt: SSO Username
    
    # 用户搜索配置
    userSearch:
      # 从基本 DN 开始搜索
      baseDN: cn=users,dc=example,dc=com
      # LDAP 查询语句,用于搜索用户。
      # 例如: "(&(objectClass=person)(uid=<username>))"
      filter: (&(objectClass=organizationalPerson))

      # 以下字段为用户条目属性的直接映射。
      # 用户 ID 属性
      idAttr: uid
      # 必填。映射到电子邮件的属性                     
      emailAttr: mail
      # 必填。映射到用户名的属性
      nameAttr: cn
      # 登录用户名属性
      # 筛选条件将转换为 "(<attr>=<username>)",如 (uid=example)。
      username: uid

      # 扩展属性
      # phoneAttr: phone

    # 组搜索配置  
    groupSearch:
      # 从基本 DN 开始搜索
      baseDN: cn=groups,dc=freeipa,dc=example,dc=com
      # 组过滤条件
      # "(&(objectClass=group)(member=<user uid>))"。
      filter: "(objectClass=group)"
      # 用户组匹配字段
      # 组属性
      groupAttr: member
      # 用户组成员属性
      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)
)

AND(&) 和 OR(|) 运算符在 LDAP 筛选器中的示例

# 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 中删除的用户在同步后将显示为 无效 状态。

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

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

操作程序

  1. 在左侧导航栏中,点击 用户 > 身份提供者(IDP)

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

  3. 点击右上角的 操作 > 同步用户

  4. 点击 同步

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

相关操作

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

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

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

提示:删除 IDP 后,如果需要删除通过 LDAP 同步到平台的用户和用户组,请在提示框下方勾选 清理 IDP 用户和用户组 复选框。