http://dev2dev.bea.com.cn/bbs/school/guide/webser/2005042001.html
1.3 LDAP Security
LDAP是轻量级目录服务(Lightweight Directory Access Protocol)。越来越多的应用开始采用LDAP作为后端用户存储。在安全上,LDAP Security是基于ACL(Access Control List)的,它通过给一个用户组分配LDAP 操作资源(比如对一个子树的查询,修改等)来最终完成权限的控制。因此在LDAP中,授权工作是以用户组为单位进行的。一个用户组一般来说是拥有如下一组属性的LDAP Entry:

图1-3-1
其中objectclass可以为groupOfUniqueNames或者groupOfNames,它们对应的组成员属性分别是uniquemember和member。如果是动态组,objectclass为groupOfURLs。动态组一般应用在成员可以通过某种业务逻辑运算来决定的情况下。比如,经理为ZHANGSAN的全部员工。下面是一个典型的动态组,memberURL属性定义了哪些entry属于该组:

图1-3-2
从图1-3-1中我们可以看出,用户WANTXIAOMING,ZHANGSAN,LISI属于组HR Managers。这种组和成员的关系是通过属性uniquemember来决定的。同时LADP Group 支持嵌套,即一个组可以是另外一个组的成员,比如我们将Accounting Managers组分配给HR Managers组作为其成员:

图1-3-3
这样将表示Accounting Managers中的成员,同时也是组HR Managers的成员。通过这种层级关系可以使权限分配变的更加灵活。
下面是一些名词的解释,希望大家对LDAP有更好的理解:
a) Objectclass —— LDAP对象类,抽象上的概念类似与一般我们理解的class。根据不同的objectclass,我们可以判断这个entry是否属于某一个类型。比如我们需要找出LDAP中的全部用户:(objectclass=person)再比如我们需要查询全部的LDAP组:(objectclass=groupOfUniqueNames)
b) Entry —— entry可以被称为条目,或者节点,是LDAP中一个基本的存储单元;可以被看作是一个DN和一组属性的集合。 属性可以定义为多值或者单值。
c) DN —— Distinguished Name,LDAP中entry的唯一辨别名,一般有如下的形式:uid=ZHANGSAN, ou=staff, ou=people, o=examples。LDAP中的entry只有DN是由LDAP Server来保证唯一的。
d) LDAP Search filter ——使用filter对LDAP进行搜索。 Filter一般由 (attribute=value) 这样的单元组成,比如:(&(uid=ZHANGSAN)(objectclass=person)) 表示搜索用户中,uid为ZHANGSAN的LDAP Entry.再比如:(&(|(uid= ZHANGSAN)(uid=LISI))(objectclass=person)),表示搜索uid为ZHANGSAN, 或者LISI的用户;也可以使用*来表示任意一个值, 比如(uid=ZHANG*SAN),搜索uid值以 ZHANG开头SAN结尾的Entry。更进一步,根据不同的LDAP属性匹配规则,可以有如下的Filter: (&(createtimestamp>=20050301000000)(createtimestamp<=20050302000000)),表示搜索创建时间在20050301000000和20050302000000之间的entry。
Filter中 “&” 表示“与”;“!”表示“非”;“|”表示“或”。根据不同的匹配规则,我们可以使用“=”,“~=”,“>=”以及“<=”,更多关于LDAP Filter读者可以参考LDAP相关协议:http://www.ietf.org/rfc/rfc2254.txt。
e) Base DN —— 执行LDAP Search时一般要指定basedn,由于LDAP是树状数据结构,指定basedn后,搜索将从BaseDN开始,我们可以指定Search Scope为:只搜索basedn(base),basedn直接下级(one level),和basedn全部下级(sub tree level)。
下面是一个典型的LDAP Tree结构,右侧显示Entry uid=ZHANGSAN, ou=staff, ou=people, o=examples的属性,该entry代表了一个名字叫张三的用户:

3 了解WebLogic LDAP Authentication Provider
现在我们有信心了解一下WebLogic LDAP Authentication Provider的工作原理了。这里将以WebLogic提供的iPlanet Authentication Provider的配置为例进行说明。在这里也需要明确说明一下,为了方便进行描述,我们将实际属于LoginModule的行为也一并归结到Provider中。没有单独将两个的行为分开,目的是为了突出整个完整的过程。
3.1 iPlanet Authentication Provider配置

图3-1-1
从上图可以看出我们需要指定LDAP服务器的地址,端口,连接LDAP使用的Principal(不同于前面讨论的Principal,这个Principal实际是一个连接LDAP的用户,也就是一个LDAP 中用户Entry的 DN,它必须要有相关的LDAP 搜索等权限)和Credential(一般来说就是口令)。
再看下面关于Users的配置:

图3-1-2
3.1.1 User Object Class —— 前面已经对objectclass进行过说明,指明LDAP Entry属于哪一类
3.1.2 User Name Attribute —— 用户登录帐号在LDAP Entry中的属性,一般为UID或者cn
3.1.3 User Base DN —— 所有的用户将会放置到这个子树下面,因此在Provider中对用户进行的搜索将会从这个basedn开始
3.1.4 User Search Scope —— 指定搜索范围为Basedn的直接一级或者全部下级
3.1.5 User From Name Filter —— 使用这个filter可以搜索出用户信息。其中%u将会被用户输入的登录帐号替换,从而查询中LDAP中的用户信息

图3-1-3
3.1.6 Group Base DN —— 从该Base DN开始搜索用户组
3.1.7 Group From Name Filter —— %g将会被组的名字替换,通过该filter可以搜索出符合条件的LDAP Group
3.1.8 Static group name attribute —— 组名字的属性,属性cn对应的值就是组的名字

图3-1-4
3.1.9 Static Member DN Attribute —— 静态成员属性,通过该属性可以判断一个Entry是否属于一个组
3.1.10 Static Group DNs From Member DN Filter —— 通过该filter可以找出用户属于哪些组
3.1.11 Dynamic Group —— 动态组是在运行时根据某种业务逻辑,来决定成员隶属关系的LDAP Group
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=509214