什么是轻量级目录访问协议(LDAP)?

轻量级目录访问协议(LDAP)是一种开放、独立于厂商的协议,应用程序使用该协议通过网络访问和维护目录信息。目录是一种集中式数据存储,用于存储组织的用户、群组和设备相关数据,而 LDAP 最常用于通过该目录对用户进行身份验证。当用户使用同一用户名和密码登录工作邮箱、VPN 或公司内部应用程序时,LDAP 会在后台运行。LDAP 允许多个应用程序通过共享的集中式目录验证凭据,而无需每个应用程序维护自己的用户列表,因此成为登录企业系统的基础技术。

LDAP 最初被设计为目录访问协议(DAP)的一种更简单、更高效的替代方案;DAP 则是 X.500 目录标准中的一种较旧且资源开销较大的访问协议。LDAP 保留了结构化目录的核心理念,同时减少了复杂的实现要求和开销,从而更易于采用。

LDAP 与 Active Directory 对比

虽然人们通常认为 LDAP 和 Active Directory 是相互竞争的替代方案,但实际上两者完全不同。LDAP 是用于访问和管理目录信息的一套标准规则,也可以说是一种共享语言。它本身不存储任何数据,而是应用程序用来与目录进行通信的协议。

Active Directory(AD)是 Microsoft 提供的目录服务产品,用于存储和管理网络上的用户、群组和设备信息。LDAP 是 Active Directory 用来让应用程序读取和写入其目录的协议。简单来说,LDAP 就是 Active Directory 可以使用的一种语言。由于 LDAP 是一种开放且独立于厂商的标准,因此受到各种目录产品和服务的支持,包括 OpenLDAP、JumpCloud 和 Oracle Internet Directory。无论组织选择使用哪种目录,应用程序都可以依赖同一协议;这种灵活性是 LDAP 得到广泛采用的重要原因之一。

LDAP 是如何工作的?

LDAP 采用客户端-服务器模型,其中客户端是需要目录信息的应用程序(如登录界面或电子邮件程序),服务器则是目录本身。与 LDAP 目录的典型交互包括客户端发送请求,LDAP 服务器根据目录处理请求,然后返回响应。要了解目录的组织方式,首先需要了解其中可以存储哪些内容:

  • 条目:目录中的一条记录。条目通常代表一个对象,例如个人、群组或设备。
  • 属性:与条目关联的数据,包括姓名、电子邮件地址、电话号码或部门。每个属性都有类型和值。
  • 可分辨名称(DN):用于标识目录中条目的唯一“地址”,这意味着任意两个条目都不能使用相同的 DN。DN 以路径形式表示,由条目名称及其所属层级构成,用于准确告知目录条目的位置。

条目按照称为目录信息树(DIT)的层级结构进行组织。与公司组织结构图类似,DIT 从较宽泛的根节点向下分支为更具体的分组,例如部门,最终延伸到用户等单个条目。这种树状结构使 DN 可以作为路径来理解,每个人的 DN 都描述了从树顶到其条目所在位置的路径。

LDAP 的常见应用场景

LDAP 的几乎所有用途都可以归结为一个核心思想:多个应用程序可以共享一个关于用户和资源的集中式权威数据源,而无需各自维护自己的数据。以下是组织使用 LDAP 的最常见方式。

身份验证和授权

LDAP 的主要应用场景包括身份验证和授权。身份验证涉及确认用户身份,这通过 LDAP 绑定操作实现:应用程序提交用户身份和密码,由目录验证或拒绝。授权则涉及确定已通过身份验证的用户可以执行哪些操作。LDAP 目录将用户组织到群组中,应用程序会检查群组成员身份,以授予或拒绝访问权限。例如,只有“HR”群组的成员才能在薪资系统中进行编辑。

集中式用户管理

传统上,每个应用程序都维护自己的用户和密码列表。过去,新员工入职意味着需要在多个地方逐一创建账户,而员工离职则意味着要逐一查找并禁用这些账户;如果遗漏任何一个账户,都会带来严重的安全风险。借助 LDAP,所有应用程序都通过同一个目录进行身份验证。这样可以加快入职和离职流程、保持密码策略一致,并在一个集中位置审计谁拥有对哪些资源的访问权限。

单点登录(SSO)基础

由于每个应用程序都可以指向同一个目录,因此 LDAP 为单点登录(SSO)奠定了基础,使一套凭据可以用于不同的系统。需要明确的是,LDAP 是 SSO 的基础,而其本身并不是 SSO。完整的 SSO 体验(用户只需登录一次,即可在各个应用程序之间切换而无需重新输入密码)通常还需要其他协议,但其底层的共享身份源通常是 LDAP 目录。

联系人查询

由于目录存储了人员及其属性,应用程序可以将其作为全公司共享的地址簿进行查询。例如,当用户开始输入同事姓名时,电子邮件客户端可能会自动补全其电子邮件地址;或者,内部工具中的“员工目录”搜索可能会返回该同事的信息。在这里,LDAP 的工作方式完全符合预期:目录针对读取进行了优化,能够处理大量快速查询,因此非常适合此类查询。

存储配置信息

除人员外,目录还可以存储网络打印机、服务器和共享设备等机器资源的条目。这样,应用程序和用户便可从一个集中位置发现并连接这些资源,而无需逐一手动配置。工作站可以通过目录定位附近的打印机,系统也可以在启动时获取设备设置。虽然这只是一个规模较小的应用场景,但它体现了 LDAP 的灵活性。

LDAP 端口和安全性

默认情况下,LDAP 通过 389 端口进行通信,这是 LDAP 流量使用的标准端口。但是,LDAP 本身不提供加密,因此数据会以明文传输。任何能够拦截该流量的人都可能读取其中的内容,包括用户名和密码等敏感信息。对于经常用于处理登录的协议而言,这构成重大风险,因此强烈建议使用加密。以下是保护 LDAP 安全的两种最常见方式:

  • LDAPS 使用 636 端口。在此模式下,连接建立后即进行加密,因此整个会话期间的流量都会受到保护。其中的 S 代表“安全”(Secure),与 HTTPS 中的含义相同。
  • StartTLS 使用标准的 389 端口。它不使用单独的安全端口,而是先建立普通 LDAP 连接,然后使用 TLS 将其升级为加密连接。最终效果与 LDAPS 类似,但它是在同一端口上完成协商,而不是使用专用端口。

关键点是,389 端口上的普通 LDAP 本身不提供任何保护。无论使用 636 端口上的 LDAPS 还是 389 端口上的 StartTLS,都应将加密视为必不可少的措施。

LDAP 的优缺点

LDAP 的优势解释了它为何长期以来一直是企业身份管理的重要支柱,而其局限性则表明,在某些情况下需要借助辅助工具,或者 LDAP 并非最合适的选择。

LDAP 的优势LDAP 的局限性
LDAP 的优势
  • 开放标准——广泛受支持的标准,而非专有技术,因此应用程序能够保持一致的行为,组织也拥有更大的灵活性
  • 独立于厂商——可跨多个目录产品运行,因此组织可以选择或切换底层目录,而无需修改应用程序的连接方式
  • 可扩展——针对大量查询进行了优化,因此随着用户数量和请求量增长,仍能保持良好的性能
  • 集中式身份——允许多个应用程序依赖同一个目录作为唯一权威数据源
LDAP 的局限性
  • 默认明文——端口 389 上的标准 LDAP 未加密,因此需要通过 LDAPS 或 StartTLS 主动启用 TLS 才能确保安全
  • 不太适合写入密集型工作负载——目录针对读取而非写入进行了优化,因此需要频繁更新的应用通常更适合使用传统数据库
  • 配置复杂性——定义树状结构和访问规则可能需要专业知识,无论是设置还是维护都如此

撤销 Cookie 同意我们重视您的隐私

我们的网站使用 cookies 为您提供最佳的浏览体验、提供有关我们产品和内容的个性化广告,并分析网站流量。 如需了解更多信息,请参阅我们的隐私政策。

注册免费试用

立即购买