LDAP 认证
轻量级目录访问协议 (LDAP) 是一种因特网协议,用于通过网络访问和维护分布式目录信息服务。 如果使用 LDAP 来认证 Web 应用程序的用户,请在开始之前花一点时间来查看本主题的内容。
编程准则
- 仅使用 LDAP 接口 - 只能通过连接到 LDAP 服务器来认证用户。
- Active Directory - 禁止使用 Active Directory 接口,但支持采用 Active Directory 的 LDAP 认证。
- 管理员属性 - LDAP 管理员必须对所有用户的 LDAP 属性具有访问权。
| 属性 | 定义 |
|---|---|
mail |
用户的 SMTP 电子邮件地址。 |
cn |
内部使用,用于确定用户的常用名。 |
sn |
内部使用,用于确定用户的姓氏。 |
givenname |
内部使用,用于确定用户的名字。 |
来自 Search dn 的前缀 |
用作用户名。 |
使用 LDAP 服务器来认证用户
attribute=value 对组成。 例如:cn=Ben Gray,ou=editing,o=New York Times,c=US
cn=Lucille White,ou=editing,o=New York Times,c=US
cn=Tom Brown,ou=reporting,o=New York Times,c=US目录模式中定义的任何属性都可用于构成 DN。 组成部分属性值对的顺序非常重要。 对于从根目录往下到条目所在级别的目录层次结构中的每个级别,DN 都包含一个相应的组成部分。 LDAP DN 以最具体的属性(通常是某种名称)开始,后面跟有范围越来越广泛的属性,通常最后以国家或地区属性结尾。 DN 的第一个组成部分称为相对专有名称 (RDN)。 它清楚地将某个条目与所有其他具有相同父代的条目区分开。 在之前的示例中,RDN“cn=Ben Gray”将第一个条目和第二个条目(具有 RDN“cn=Lucille White”)区分开。 在其他方面,这两个示例 DN 完全相同。 构成条目 RDN 的“属性=值”对也必须存在于该条目中。 (这不适用于 DN 的其他组成部分。)
示例
uid=”,而使用的后缀为“)”,那么 uid 将成为用户名属性。 使用的缺省搜索过滤器为:(|(cn={filter}*)(sn={filter}*)(mail={filter}*)(givenName={filter})),用作前缀的属性也将添加到搜索过滤器中。 在此例中,“(uid=”是前缀,在搜索用户时,搜索过滤器将为: (|(cn={filter}*)(sn={filter}*)(mail={filter}*)(givenName={filter}*)(uid={filter}*))其中 {filter} 将替换为实际文本。已认证的绑定 DN 是外部 LDAP 服务器上的一个用户,有权获取基本 DN 并在定义的搜索库内搜索 LDAP 目录。 它还应该能够读取其他用户属性,并在不允许匿名访问 LDAP 以获取基本 DN 以及搜索用户属性并获取其访问权的情况下使用。 在搜索 Steve 时,将使用以下示例中显示的 LDAP 查询过滤器,并从 UI 中指定的基本 DN 完成搜索。 在返回用户 DN 后,将使用该 DN 及密码来认证用户:
(|(cn=Steve*)(sn=Steve*)(mail=Steve*)(givenName=Steve*)(uid=Steve*)).对于登录调用期间的绑定,所使用的搜索字符串是前缀。 例如,如果前缀为“(uid=”,那么用于在登录期间搜索用户的搜索字符串将为:(uid=Steve)。- 将 mail 属性用作用户名
- 当您要使用电子邮件地址作为用户名 (例如 steve@company.com) 时,通常使用 mail 属性作为前缀 "(
mail=")。 在这种情况下,请使用以下搜索字符串在内部执行搜索 (假定 "(mail=" 作为前缀)):
在之前的示例中,如果找到 DN,那么将结合使用该 DN 和密码来执行绑定。 将获取第一个结果,因此请确保针对用户名使用唯一属性。 接下来,将读取用户的 LDAP 属性 ((|(cn=steve@company.com*)(sn=steve@company.com*)(mail=steve@company.com*) (givenName=steve@company.com*)(mail=steve@company.com*))cn,sn,mail和givenName)。 如果无法使用登录用户读取 LDAP 属性,那么将使用已认证的绑定凭证从用户的 DN 中读取这些属性。 如果用户名属性不同,那么还将查询用户名属性。 例如,如果前缀为“(uid=”,那么还将从用户的 DN 对象中读取uid属性:(|(cn={filter}*)(sn={filter}*)(mail={filter}*)(givenName={filter}*))注: 前缀和后缀不能用于直接获取用户的 DN。 例如,以下直接获取用户 DN 的尝试将失败:Prefix: "uid=", Suffix: ",ou=users,dc=company,dc=com"
LDAP 引荐
通过 LDAP 引荐,可以将目录树分区并使其分布在多个 LDAP 服务器之间。 LDAP 引荐是域控制器使用的一种方式,向客户机应用程序指示其不具有所请求对象的副本,而是向客户机提供该对象可能的保存位置。 之后,客户机使用该对象作为域控制器的 DNS 搜索基础。
- 搜索属于多个 Active Directory 树和森林的用户。
- 在云管理器、 API 管理器和 CMS 门户中验证用户身份。
- 使用管理员凭证来配置单个 LDAP 主机/端口,并从树/服务器的基本 DN 中引用所有用户。
- 遵循 LDAP 引荐进行用户搜索时,下游树/森林中将使用相同的管理员凭证。
- LDAP API 认证不支持外部 LDAP 引荐。 支持内部 LDAP 引荐。