什么是 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 和用戶過濾器,嘗試搜索用戶。一旦找到該用戶,它就會嘗試用所提供的密碼進行身份驗證。
若要獲得有關用戶身份驗證失敗的確切位置的更多信息,可啟用調試標志。 此搜索將類似于:
|