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) | 用户 ID | uid=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=example 或 sAMAccountName=example |
| objectClass: user | AD 用户对象类 | 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 服务器地址
- 管理员用户名
- 管理员密码
- 其他所需配置详情
操作步骤
- 在左侧导航栏,点击 Users > IDPs
- 点击 Add LDAP
- 配置以下参数:
基本信息
| 参数 | 说明 |
|---|
| Server Address | LDAP 服务器访问地址(例如:192.168.156.141:31758) |
| Username | LDAP 管理员 DN(例如:cn=admin,dc=example,dc=com) |
| Password | LDAP 管理员账号密码 |
| 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) |
-
在 IDP Service Configuration Validation 部分:
- 输入有效的 LDAP 账号用户名和密码
- 用户名必须与 Login Field 设置匹配
- 点击验证配置
-
(可选)配置 LDAP 自动同步策略:
- 启用 Auto-Sync Users 开关
- 设置同步规则
- 使用 在线工具 验证 CRON 表达式
-
点击 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 用户)同名的同步用户会自动关联,权限和有效期与现有用户保持一致。用户可使用各自来源对应的登录方式登录平台。
操作步骤
-
在左侧导航栏,点击 Users > IDPs。
-
点击要手动同步的 LDAP 名称。
-
点击右上角的 Actions > Sync user。
-
点击 Sync。
注意:如果您手动关闭同步提示对话框,会弹出确认关闭的对话框。关闭同步提示对话框后,系统仍会继续同步用户。如果您停留在用户列表页面,将收到同步结果反馈;如果离开用户列表页面,则不会收到同步结果。
相关操作
您可以在列表页右侧点击
或在详情页右上角点击 Actions,根据需要更新或删除 LDAP。
| 操作 | 说明 |
|---|
| 更新 LDAP | 更新已添加 LDAP 的配置信息或 LDAP 自动同步策略。
注意:更新 LDAP 后,通过该 LDAP 同步到平台的用户也会被更新。从 LDAP 中移除的用户在平台用户列表中将变为无效。您可以通过执行清理无效用户操作来清理垃圾数据。 |
| 删除 LDAP | 删除 LDAP 后,通过该 LDAP 同步到平台的所有用户状态将变为 Invalid(用户与角色的绑定关系保持不变),且无法登录平台。重新集成后需重新执行同步以激活用户。
提示:删除 IDP 后,如需删除通过 LDAP 同步到平台的用户和用户组,请勾选提示框下方的 Clean IDP Users and User Groups 复选框。 |