# LDAP v3

> 原文： [https://docs.oracle.com/javase/tutorial/jndi/ldap/ldap.html](https://docs.oracle.com/javase/tutorial/jndi/ldap/ldap.html)

## 国际化

国际化通过国际字符集（ISO 10646）来解决，以表示作为字符串的协议元素（例如 DN）。版本 3 与版本 2 的不同之处还在于它使用 UTF-8 对其字符串进行编码。

## 认证

除了匿名，简单（明文密码）身份验证之外，LDAP v3 还使用简单身份验证和安全层（SASL）身份验证框架（ [RFC 2222](http://www.ietf.org/rfc/rfc2222.txt) ）来允许与 LDAP 一起使用不同的身份验证机制。 SASL 指定质询 - 响应协议，其中在客户端和服务器之间交换数据以进行身份​​验证。

目前定义了几种 SASL 机制： [DIGEST-MD5](http://www.ietf.org/rfc/rfc2831.txt) ， [CRAM-MD5](http://www.ietf.org/rfc/rfc2195.txt) ，[匿名](http://www.ietf.org/rfc/rfc2245.txt)，[外部](http://www.ietf.org/rfc/rfc2222.txt)， [S / Key](http://www.ietf.org/rfc/rfc2222.txt) ， [GSSAPI](http://www.ietf.org/rfc/rfc2222.txt) 和 [Kerberos v4](http://www.ietf.org/rfc/rfc2222.txt) 。 LDAP v3 客户端可以使用任何这些 SASL 机制，前提是 LDAP v3 服务器支持它们。此外，可以使用新的（尚未定义的）SASL 机制，而无需对 LDAP 进行更改。

## 介绍人

_ 推荐 _ 是服务器发送回客户端的信息，指示可以在另一个位置（可能在另一个服务器处）找到所请求的信息。在 LDAP v2 中，服务器应该处理引用而不是将它们返回给客户端。这是因为处理引用可能非常复杂，因此会导致更复杂的客户端。在构建和部署服务器时，发现引用很有用，但没有多少服务器支持服务器端引用处理。因此，我们找到了一种方法来改进协议以允许它返回引用。这是通过将引用置于“部分结果”错误响应的错误消息内部来完成的。

LDAP v3 明确支持引用，并允许服务器将引用直接返回给客户端。本课不会介绍推荐，但您可以随时参考 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/referral/index.html)来管理应用程序中的推荐。

## 部署

诸如 LDAP 之类的通用协议对于确保所有目录客户端和服务器“使用相同的语言”非常有用。当在网络中部署许多不同的目录客户端应用程序和目录服务器时，对于所有这些实体来说，讨论相同的对象也非常有用。

_ 目录模式 _ 指定了目录可能具有的对象类型以及每种类型的对象可能具有的强制和可选属性。 LDAP v3 定义了基于 X.500 标准的模式（ [RFC 2252](http://www.ietf.org/rfc/rfc2252.txt) 和 [RFC 2256](http://www.ietf.org/rfc/rfc2256.txt) ），用于网络中的常见对象，例如国家，地区，组织，用户/人员，团体和设备。它还为客户端应用程序定义了一种访问服务器模式的方法，以便它可以找出特定服务器支持的对象类型和属性。

LDAP v3 进一步定义了一组用于表示属性值的语法（ [RFC 2252](http://www.ietf.org/rfc/rfc2252.txt) ）。要编写需要访问模式的 Java 应用程序，请参阅 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/schema/index.html)。

## 扩展

除了预定义操作的所有操作（例如“搜索”和“修改”）之外，LDAP v3 还定义了 _“扩展”操作 _。 “扩展”操作将请求作为参数并返回响应。该请求包含标识请求和请求参数的标识符。响应包含执行请求的结果。这对“扩展”操作请求/响应称为 _ 扩展 _。例如，Start TLS 可以有一个扩展，它是客户端向服务器请求激活 Start TLS 协议的请求。

这些扩展可以是标准的（由 LDAP 社区定义）或专有的（由特定目录供应商定义）。有关编写需要使用 Extensions 的应用程序，请参阅 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/ext/index.html)。

## 控制

添加新功能的另一种方法是使用 _ 控件 _。 LDAP v3 允许通过使用控件修改任何操作的行为。可以与操作一起发送任意数量的控件，并且可以返回任何数量的控件及其结果。例如，您可以发送排序控件以及“搜索”操作，该操作告诉服务器根据`“名称”`属性对搜索结果进行排序。

与扩展类似，此类控件可以是标准的或专有的。标准控件在[平台](https://docs.oracle.com/javase/8/docs/api/javax/naming/ldap/Control.html)中提供。有关编写需要使用控件的应用程序，请参阅 [JNDI 教程](https://docs.oracle.com/javase/jndi/tutorial/ldap/ext/index.html)。