6

我正在尝试从 spring security 连接 Ldap,出现连接错误。有人可以提出这个配置有什么问题吗?

UsernamePasswordAuthenticationFilter - 尝试对用户进行身份验证时发生内部错误。org.springframework.security.authentication.InternalAuthenticationServiceException:LDAP处理过程中发生未分类异常;嵌套异常是 javax.naming.NamingException:[LDAP:错误代码 1 - 000004DC:LdapErr:DSID-0C0906E8,注释:为了执行此操作,必须在连接上完成成功的绑定。,数据 0,v1db1];org.springframework.security.ldap.authentication.LdapAuthenticationProvider.doAuthentication(LdapAuthenticationProvider.java:191) 的剩余名称 'ou=Users,dc=aaa,dc=bbb,dc=ccc,dc=dddd'

配置文件有,

<sec:authentication-manager alias="myAuthenticationManager">
    <sec:authentication-provider ref="myAuthenticationProvider"/>
</sec:authentication-manager>

<bean id="myAuthenticationProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
    <constructor-arg ref="ldapBindAuthenticator"/>
    <constructor-arg ref="ldapAuthoritiesPopulator"/>
</bean>

<bean id="ldapBindAuthenticator" class="org.springframework.security.ldap.authentication.BindAuthenticator">
    <constructor-arg ref="contextSource" />
    <property name="userSearch" ref="userSearch"/>
</bean>

<bean id="userSearch" class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
    <constructor-arg index="0" value="ou=Users,dc=aaa,dc=bbb,dc=ccc,dc=dddd"/>
    <constructor-arg index="1" value="(sAMAccountName={0})"/>
    <constructor-arg index="2" ref="contextSource"/>
    <property name="searchSubtree" value="true"/>
</bean>

<bean id="ldapAuthoritiesPopulator" class="com.xxxx.MyLdapAuthoritiesPopulator">
    <property name="userDao" ref="userDao"/>
</bean>

<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    <constructor-arg value="ldaps://aaa.com:123/DC=aa,DC=bb,DC=cc,DC=dd"/>
    <property name="base" value="DC=aa,DC=bb,DC=cc,DC=dd" />
    <!-- <property name="anonymousReadOnly" value="true"/> -->

</bean>
4

1 回答 1

9

假设用户尝试使用用户名 XXX 和密码 YYY 登录。通常 LDAP 身份验证是这样工作的:

  1. 使用技术帐户绑定到 LDAP
  2. 使用用户名 XXX 搜索用户 => 获取他的 DN
  3. 尝试使用找到的 DN 和密码 YYY 绑定到 LDAP

您的错误表明您没有正确执行第一步(技术帐户绑定)。

尝试将 userDn 和密码添加到您的上下文源(这来自官方 JavaDoc):

<bean id="contextSource"
        class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
    <constructor-arg value="ldap://monkeymachine:389/dc=springframework,dc=org"/>
    <property name="userDn" value="cn=manager,dc=springframework,dc=org"/>
    <property name="password" value="password"/>
</bean>
于 2013-06-09T11:02:17.427 回答