web-dev-qa-db-ja.com

Spring Security AD LDAP:エラーコード1-000004DC:LdapErr:DSID-0C0906E8

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>
5
Jon Smith

ユーザーがユーザー名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>
8
Pavel Horal