在要根據(jù)LDAP進(jìn)行身份驗(yàn)證時(shí),通常會(huì)采取以下兩種方法:
利用一個(gè)LDAP用戶的用戶名和密碼綁定到LDAP服務(wù)器;
在LDAP中檢索一個(gè)用戶的條目,然后將提供的密碼和檢索到的LDAP記錄中的密碼屬性相比較。
為了綁定身份驗(yàn)證,Spring Security帶有一個(gè)稱為BindAuthenticator的LdapAuthenticator實(shí)現(xiàn)。BindAuthenticator使用一個(gè)LDAP bind運(yùn)算符來把一個(gè)用戶綁定到LDAP服務(wù)器。這種方法依靠LDAP服務(wù)器來驗(yàn)證所綁定用戶的憑證。
下列<bean>在Spring中聲明一個(gè)BindAuthenticator:
![]() |
在這里,我們已經(jīng)聲明這個(gè)BindAuthenticator是通過一個(gè)構(gòu)造函數(shù)參數(shù)和通過userDnPatterns屬性來注入的。稍后我們將回到這個(gè)構(gòu)造函數(shù)參數(shù)。首先,讓我們考慮那個(gè)userDnPatterns屬性。
這個(gè)userDnPatterns屬性是用來告訴BindAuthenticator如何在LDAP中找到某個(gè)用戶的。它的值是一個(gè)模式列表,是BindAuthenticator將用做識(shí)別名(DN)來識(shí)別用戶的一個(gè)或多個(gè)模式。在這里,我們只使用一個(gè)DN模式,如圖7.6所示。
![]() |
圖7.6 出于我們的目的,一個(gè)用戶的識(shí)別名 (DN)被分解為用戶ID(UID)和組織單元(OU) |
DN模式中的{0}是一個(gè)充當(dāng)用戶名占位符的模式參數(shù)。舉例來說,如果用戶名為cwagon,那么用來綁定到LDAP的DN將是uid=cwagon,ou=motorists。
現(xiàn)在,回到前面那個(gè)構(gòu)造函數(shù)參數(shù)。為了能夠做好自己的工作,BindAuthenticator需要知道的主要事情是如何訪問相應(yīng)的LDAP倉庫。因此,它和一個(gè)構(gòu)造函數(shù)參數(shù)一同構(gòu)建,裝配到initialDirContextFactory,其聲明方式如下:
![]() |
DefaultInitialDirContextFactory捕獲連接到一臺(tái)LDAP服務(wù)器所需的全部信息,并生成一個(gè)JNDI DirContext對象。如果讀者不太了解JNDI或DirContext,則不必?fù)?dān)心這些具體細(xì)節(jié),只需記住BindAuthenticator是利用DefaultInitialDirContextFactory來獲悉如何到達(dá)相應(yīng)的LDAP倉庫即可。
用來創(chuàng)建DefaultInitialDirContextFactory的那個(gè)構(gòu)造函數(shù)參數(shù)和LDAP提供者的URL一起裝配。在這里,我們已經(jīng)把它和對RoadRantz LDAP服務(wù)器 的一個(gè)引用裝配在一起,并且在dc=roadrantz,dc=com處建立了初始上下文。用來查找用戶信息的DN將被關(guān)系到這個(gè)初始上下文。
回書目 上一節(jié) 下一節(jié) |
聯(lián)系客服