什么是 LDAP,WLS 如何使用它? 轻量型目录访问协议 (LDAP) 是程序用于从服务器中查找联系信息的一个协议。与关系数据库很相似,每个 ldap 数据库(或目录)都拥有一个 schema。LDAP schema 是作为一组对象类定义和属性定义来实现的。
LDAP 中使用的一些常用术语是:
- dc= 域组件
- o = 组织
- ou= 组织单位
- cn= 公用名
- dn= 辨别名
- uid= 用户 ID
当您需要在 LDAP 中搜索条目时,必须提供搜索的基准和过滤器。 例如:
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。配置数据包含连接、搜索等操作所需的所有数据,并且必须已定义了下列设置:
- server.host
- server.port
- server.principal
- user.filter
- user.dn
- group.filter
- group.dn
- membership.filter
然后,自定义 Realm 被映射到一个缓存 Realm 上,该缓存 Realm 反过来也被选择为服务器的缺省 Realm。
注意,在同一时间只有一个 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 和用户过滤器,尝试搜索用户。一旦找到该用户,它就会尝试用所提供的密码进行身份验证。
若要获得有关用户身份验证失败的确切位置的更多信息,可启用调试标志。 此搜索将类似于:
|