2017-02-23 50 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。 –