理解LDAP
LDAP在逻辑目录模型方面能够追溯到超过三十年前——在概念上类似于组织机构图和地址薄。今天,LDAP越来越多的用来作为集中管理组织用户信息的方式,可以将成千的用户分成逻辑上的组并允许在不同的分布式系统间共享统一的用户信息。
为了安全目的,LDAP经常被用来帮助集中的用户名和密码认证——用户的凭证存储在LDAP目录中,而对于用户来说,认证请求基于目录进行。这对于管理员来说可以便于管理,因为用户的凭证——登录、密码和其它信息——都存储在LDAP中的一个地址。另外,组织机构信息,如组和团队的分配、地理位置以及组织的等级结构,也定义在用户在目录中的位置上。
如果你以前从来没有使用过LDAP,你可能想知道它到底是什么。我们通过一个Apache Directory Server 1.5的截图作为LDAP模式的例子进行介绍。
image.png
让我们从一个特定用户Albert Einstein(截图中高亮显示)的条目开始,我们可以看到Mr. Einstein的组织成员信息可以从他的树节点往上移动看到。我们可以看到einstein是组织单元(organizational unit,ou)users的成员,而组织单元本身是域example.com的一部分(截屏中显示的dc代表的域组件“domain component”)。在此之前的是LDAP树本身的组织机构元素(DIT和Root DSE),这些现在与我们无关。用户aeinstein在LDAP结构中有其语义且意义明确——你可以想象一个巨大组织更复杂的等级结构也能够很容易的说明其组织机构和部门的边界。
一个叶子节点在树上从上到下的路径形成了包含所有参与节点的字符串,如Mr. Einstein的节点路径为:
Xml代码 uid=aeinstein,ou=users,dc=example,dc=com
**uid=aeinstein,ou=users,dc=example,dc=com **这个节点路径是唯一的,并被称为节点的标识名(distinguished name,DN)。标识名类似于数据库里的主键,允许节点在复杂的树结构中唯一标识和定位。我们将会看到的节点的DN广泛应用于Spring Security LDAP集成的认证和查找过程。
我们可以看到还有几个其他的用户和Mr. Einstein在同一个等级的组织结构上。我们假设所有的这些用户都与Mr. Einstein在相同的组织下。尽管这个组织机构的例子相对简单,但是LDAP的结构是极其灵活的,使得很多层级的逻辑组织机构嵌套成为可能。
通用的LDAP属性名
树上的每个实际节点都是通过一个或多个的对象类(object class)来定义的。一个对象类是组织机构的一个逻辑单元,分为一系列具有语义的相关属性。通过将一个条目声明为特定对象类的实例,如person,LDAP目录的管理人员就能够为目录的用户提供每个条目的确切含义。
LDAP具有很丰富的标准模式(schema),涵盖了可用的LDAP对象类和它们的可用属性(以及一些其它信息)。
在上一节中,我们了解到LDAP中的每个条目都会有一个标识名,它在树上唯一标识节点。DN有一系列的属性组成,其中一个(或更多)用来标识树上的用DN代表的路径。因为DN中路径的每一部分都代表一个LDAP属性,所以你能够通过定义良好的LDAP模式和类对象来确定DN中每个属性的含义。
我们在以下的表格中,列出了一些常见的属性和它们的含义。这些属性是用来作为组织相关的属性——一意味着它们一般用来定义LDAP树的组织机构——并按照结构上从上到下的顺序,正如你通常在LDAP中会见到的那样。
image.png
要记住的是有上百个标准的LDAP属性——上面只是其中的一小部分,当你与一个完整LDAP集成的话会看到它们。但是表中的这些属性是目录树中组织相关的属性,当你配置Spring Security与LDAP交互的时候可能会用来形成各种查询表达式或匹配符。
网友评论