2017-02-23 53 views
0

我想了解一下如何鑑別屬於不同基地LDAP目錄LDAP SPRING:如何驗證屬於不同的基礎用戶

我的文件配置的用戶是:

<!-- LDAP --> 

     <security:ldap-server url="ldap://192.168.10.220:389/o=org" manager-dn="uid=admin,ou=Admins,o=org" manager-password="password" /> 

     <bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> 
       <constructor-arg> 
         <bean class="org.springframework.security.ldap.authentication.BindAuthenticator"> 
           <constructor-arg ref="contextSource" /> 
           <property name="userDnPatterns"> 
             <list> 
               <value>uid={0}</value> 
             </list> 
           </property> 
         </bean> 
       </constructor-arg> 
       <constructor-arg> 
         <bean class="edu.mit.kit.userdetails.MappedLdapAuthoritiesPopulator"> 
           <property name="admins"> 
             <set> 
               <value>user1</value> 
             </set> 
           </property> 
         </bean> 
       </constructor-arg> 
     </bean> 

     <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> 
       <property name="url" value="ldap://192.168.10.220:389" /> 
       <property name="base" value="ou=comp,ou=Users,o=org" /> 
       <property name="userDn" value="admin1,ou=Admins,o=org" /> 
       <property name="password" value="password" /> 
     </bean> 

     <bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate"> 
       <constructor-arg name="contextSource" ref="contextSource" /> 
     </bean> 

我的LDAP方案根是:o = org,每個用戶都有不同的「ou」。

作爲3個用戶的例子:

  • USER1:UID =用戶1,OU =用戶,o =組織
  • USER2:UID =用戶2,OU =排版,OU =用戶,o =組織
  • 用戶3:UID =用戶3,OU = fi_Users,o =組織

所以,我找的,我可以不把所有的LDAP方案在此XML文件配置驗證這些用戶的方式。

回答

0

定義 'searchbean'

<beans:bean id="ldapUserSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"> 
<beans:constructor-arg value=""/> 
<beans:constructor-arg value="uid={0}"/> 
<beans:constructor-arg ref="contextSource"/> 
</beans:bean> 

,並使用

<beans:property name="userSearch" ref="ldapUserSearch"/> 

,而不是

<property name="userDnPatterns"> 
<list> 
    <value>uid={0}</value> 
</list> 
</property> 

這將搜索項第一,這被認爲是LDAP最佳實踐,而不是構建一個用於LDAP綁定操作的DN。

備註:由於LDAP綁定操作期間密碼通過電纜以明文傳輸,因此請勿使用LDAP,而應使用LDAPS。即使使用StartTLS擴展LDAP操作,也可以以明文方式向客戶端發送密碼,儘管您可以在服務器端強制實施安全通道......但後來太晚了,密碼已經可能被竊聽了。

+0

使用StartTLS不會以clearText發送密碼。 – jwilleke

+0

非常感謝您的解決方案! – isedrof

+0

@jwilleke StartTLS本身不是,但StartTLS操作是通過普通端口啓動的,因此您不必強制在安全通道中發送密碼,而只需在普通端口上使用LDAP綁定操作,然後以明文形式傳輸密碼電線。 可以配置LDAP服務器以拒絕此操作,但這不會有幫助,因爲密碼已被傳輸。 - >只有在擔心安全性時才使用LDAPS。 –

相關問題