| 什么是 LDAP,WLS 如何使用它? 轻量型目录访问协议 (LDAP) 是程序用于从服务器中查找联系信息的一个协议。与关系数据库很相似,每个 ldap 数据库(或目录)都拥有一个 schema。LDAP schema 是作为一组对象类定义和属性定义来实现的。
 
 LDAP 中使用的一些常用术语是:
 
 
当您需要在 LDAP 中搜索条目时,必须提供搜索的基准和过滤器。dc= 域组件 
o = 组织 
ou= 组织单位 
cn= 公用名 
dn= 辨别名 
uid= 用户 ID  例如:
 
 
 ldapsearch .b "dc=beasys,dc=com" uid=fred
 这将返回符合过滤器中所指定条件 uid=fred 的用户的所有属性。
 
 
 uid=fred,ou=People, dc=beasys,dc=com   // 这就是所谓的“完整 DN”(Full DN)objectClass=top
 objectClass=person
 objectClass=organizationalPerson
 objectClass=inetorgperson
 givenName=Fred
 cn=Fred A
 uid=fred
 sn=A
 creatorsName=uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot
 modifiersName=uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot
 createTimestamp=20040108160418Z
 modifyTimestamp=20040108162837Z
 
 此条目在 LDAP 树中的形式如下:
 
 
                 dc=beasys,dc=com     / (root)    \
 /             \
 /               \
 ou=people         ou=otherusers
 /
 uid=fred
 
 WLS 可以从外部目录服务器读取和搜索信息,这样就可以获得正确的配置信息,进行连接、绑定、搜索(基准和过滤器)等。
 
 为此,您需要在 WLS 中配置下列字段:
 
 
在这些字段内,您可以找到下列字符:LDAP 服务器主机和端口 
用于连接和进行搜索的用户/密码 
用户基准 DN:在进行用户搜索时用作基准 
用户过滤器:在进行用户搜索时用作过滤器 
组基准 DN:在进行组搜索时用作基准 
组过滤器:在进行组搜索时用作过滤器 
组成员资格过滤器:在执行搜索以查找用户所属的组时用作过滤器  
 
  %u 将用用户 ID 替代%g 将用组替代
 %M 将用用户的完整 DN 替代
 
 当 WLS 需要验证某个用户存在并拥有访问资源的权限/角色时,它使用所定义的 Principal 用户连接到 LDAP,然后对该用户进行搜索,确认其是否存在,并用其密码进行验证。然后,它搜索该用户所属的组。
 
 下面是用于成员资格检查算法的一些简洁伪代码:
 
 
 check_membership(group g, principal p):for each group g1 that contains p directly:
 if g1 == g or check_membership(g, g1)
 then return success
 return failure
 
 一旦完成了上述步骤,WLS 将根据是允许访问还是拒绝访问,确认属于已找到的组的用户是否拥有访问所请求资源的权限/角色。
 
 返回页首
 
 WLS 中常用的 LDAP 服务器
 WLS 中常用的 LDAP 服务器(作为 WLS 6.x 中的 LDAP 自定义 Realm 或较高 WLS 版本中的 Authentication Provider)是:
 
 
返回页首缺省的 Authentication Provider(内嵌 LDAP) - 仅限于 WLS 7.x 和 WLS 8.x
Iplanet 
Active Directory 
OpenLDAP 
Novell  
 WLS 6.x、WLS 7.x 和 WLS 8.x 之间的差异
 WLS 6.x
 LDAP Realm 被定义为自定义 Realm,其 Realm 类名被设置为 weblogic.security.ldaprealmv2.LDAPRealm。配置数据包含连接、搜索等操作所需的所有数据,并且必须已定义了下列设置:
 
 
然后,自定义 Realm 被映射到一个缓存 Realm 上,该缓存 Realm 反过来也被选择为服务器的缺省 Realm。server.host 
server.port 
server.principal 
user.filter 
user.dn 
group.filter 
group.dn 
membership.filter  
 注意,在同一时间只有一个 Realm 是活动的。
 
 WLS 尝试在启动时连接到 LDAP 服务器。如果您将 WebLogic Server 配置为使用自定义安全 Realm,而该 Realm 是不可用的,则 WebLogic Server 将不启动。在 6.1SP6 中引入了一个新的启动命令 -Dweblogic.security.RealmFailureOk=true,当该 Realm 不可用时,此命令将使服务器启动。此命令强制服务器使用 File Realm 来启动,而不是使用所配置的自定义 Realm。
 
 WLS 7.x 和 WLS 8.x
 WLS 7.x 和 WLS 8.x 拥有一个新的安全体系结构。 有关详细信息,请参阅: http://edocs/wls/docs70/secintro/realm_chap.html#1033368
 
 如果您正在从 WLS 6.x 升级,那么 6.x 中定义的安全 Realm 将在兼容性范围内以相同的方式定义。
 
 WLS 在启动时不会连接到 LDAP 服务器,除非它需要验证用于启动的用户身份。当 WLS 需要验证某个用户身份时,它打开一个 ldap 连接,这一点与 6.x 不同,在 6.x 中总是在启动时建立一个连接。
 
 注意,可以有多个 Authentication Provider 处于活动状态。缺省的 LDAPRealm 是内嵌的 LDAP Realm。
 
 在 WLS 7.x / 8.x 安全模式下要定义 Authentication Provider,LDAP 服务器是 Authentication Provider。下面的文件里定义了常见的 Authentication Provider:
 
 
 %WL_HOME%\server\lib\mbeantypes\wlSecurityProviders.jar
 您可以开发一个自定义Authentication Provider,并复制到 %WL_HOME%\server\lib\mbeantypes,或复制到启动时应在命令行标志中指定的另一个目录 -Dweblogic.typesDir=<dir> 中(8.1SP2 中新增)。
 
 返回页首
 
 排除连接故障
 如果 Weblogic Server 无法连接到 LDAP 服务器,请验证以下条件:
 
 您可以尝试使用 LDAP 浏览器连接。有关详细信息,请参阅工具 。
LDAP 服务器的主机名定义正确,并且被运行 WLS 的计算机识别。  
端口号正确(缺省值是 389,对于 SSL 是 636)。  
Principal 是 LDAP 中存在的一个用户,并且配置为用户的完整 DN,而不仅仅是用户 ID。Principal 可以类似于:  Principal="uid=admin, ou=Administrators, ou=TopologyManagement, o=NetscapeRoot"
 
 常见的连接错误代码是:您可以使用 LDAP 浏览器验证用户的完整 DN。有关详细信息,请参阅工具 。
 
 LDAP error (49) - incorrect password (credentials)LDAP error (32) - incorrect principal (user)
 
 有关 LDAP 结果代码的完整列表,请参阅 http://docs.sun.com/source/816-5608-10/log.htm#15324。
 
 返回页首
 
 排除用户身份验证故障
 WLS 首先连接到 LDAP,然后根据在 Authentication Provider /自定义 Realm 中定义的用户基准 DN 和用户过滤器,尝试搜索用户。一旦找到该用户,它就会尝试用所提供的密码进行身份验证。
 
 若要获得有关用户身份验证失败的确切位置的更多信息,可启用调试标志。
 此搜索将类似于:
 
 |