跳到主要内容

2. URL 定义 (URL Definition)

LDAP URL 以协议前缀 "ldap" 开头,并由以下语法定义,该语法遵循 [RFC4234] 中定义的 ABNF 记法.

   ldapurl     = scheme COLON SLASH SLASH [host [COLON port]]
[SLASH dn [QUESTION [attributes]
[QUESTION [scope] [QUESTION [filter]
[QUESTION extensions]]]]]
; <host> and <port> are defined
; in Sections 3.2.2 and 3.2.3
; of [RFC3986].
; <filter> is from Section 3 of
; [RFC4515], subject to the
; provisions of the
; "Percent-Encoding" section
; below.

scheme = "ldap"

dn = distinguishedName ; From Section 3 of [RFC4514],
; subject to the provisions of
; the "Percent-Encoding"
; section below.

attributes = attrdesc *(COMMA attrdesc)
attrdesc = selector *(COMMA selector)
selector = attributeSelector ; From Section 4.5.1 of
; [RFC4511], subject to the
; provisions of the
; "Percent-Encoding" section
; below.

scope = "base" / "one" / "sub"
extensions = extension *(COMMA extension)
extension = [EXCLAMATION] extype [EQUALS exvalue]
extype = oid ; From section 1.4 of [RFC4512].

exvalue = LDAPString ; From section 4.1.2 of
; [RFC4511], subject to the
; provisions of the
; "Percent-Encoding" section
; below.

EXCLAMATION = %x21 ; exclamation mark ("!")
SLASH = %x2F ; forward slash ("/")
COLON = %x3A ; colon (":")
QUESTION = %x3F ; question mark ("?")

"ldap" 前缀表示可从在给定主机名与端口号上运行的 LDAP 服务器访问的一个或多个条目.请注意, <host> 可包含 [RFC3986] 第 3.2.2 节所指定的字面 IPv6 地址.

<dn> 是使用 [RFC4514] 中描述的字符串格式的 LDAP 可分辨名称 (Distinguished Name).它标识 LDAP 搜索的基对象,或非搜索操作的目标.

<attributes> 构造用于指明应从一个或多个条目返回哪些属性.

<scope> 构造用于指定在给定 LDAP 服务器上执行的搜索范围.允许的范围是: "base" 表示基对象搜索, "one" 表示一级搜索, 或 "sub" 表示子树搜索.

<filter> 用于指定在搜索期间应用于指定范围内条目的搜索过滤器.其格式在 [RFC4515] 中指定.

<extensions> 构造为 LDAP URL 提供可扩展性机制,使 URL 的能力可在将来扩展.扩展是简单的逗号分隔的 type=value 对列表,对于不需要值的选项, =value 部分 MAY 被省略.每个 type=value 对是一个单独的扩展.这些 LDAP URL 扩展不一定与任何 LDAP 扩展机制相关.解析 URL 的客户端可以支持或不支持扩展.以 '!' 字符 (ASCII 0x21) 为前缀的扩展是关键的 (critical).不以 '!' 字符为前缀的扩展是非关键的 (non-critical).

如果实现了某个 LDAP URL 扩展 (即实现理解该扩展并能够使用它), 则实现 MUST 使用它.如果某个扩展未实现且被标记为关键, 则实现 MUST NOT 处理该 URL.如果某个扩展未实现且未被标记为关键, 则实现 MUST 忽略该扩展.

扩展类型 (<extype>) MAY 使用数值 OID <numericoid> 形式 (例如 1.2.3.4) 或描述符 <descr> 形式 (例如 myLDAPURLExtension) 来指定. <descr> 形式的使用 SHOULD 限于已注册的对象标识符描述性名称.有关描述性名称的注册详情与使用指南, 见 [RFC4520].

本文档未定义任何 LDAP URL 扩展.其他文档或本文档的未来版本 MAY 定义一个或多个扩展.

2.1. 百分号编码​

生成的 LDAP URL MUST 仅由 [RFC3986] 中定义的以下三种产生式之一所包含的受限字符集组成:

      <reserved>
<unreserved>
<pct-encoded>

实现 SHOULD 接受其他有效的 UTF-8 字符串 [RFC3629] 作为输入.在以下任一情况下, 八位组 MUST 使用 [RFC3986] 第 2.1 节中描述的百分号编码机制进行编码:

  • 该八位组不在 [RFC3986] 第 2.2 节定义的 reserved 集合中, 也不在 [RFC3986] 第 2.3 节定义的 unreserved 集合中.
  • 它是单个 Reserved 字符 '?', 并且出现在 <dn>, <filter> 或 LDAP URL 的其他元素内部.
  • 它是出现在 <exvalue> 内部的逗号字符 ','.

请注意, 在应用百分号编码机制之前, LDAP URL 的扩展组件可能包含一个或多个 null (零) 字节.其他组件不得包含.