2012-02-17 7 views
2

私は春のセキュリティを使用してActive Directoryインスタンスに対してユーザーを認証しようとしていますが、部分的な結果例外が発生しています。私はこれを理解しようとしているサークルで回っています。以下は私の設定です。Spring Security 3.1 ActiveDirectoryLdapAuthenticationProviderが部分結果例外を返す

は、セキュリティアプリコンテキスト

<authentication-manager erase-credentials="true"> 
     <authentication-provider> 
      <user-service> 
       <user name="[email protected]" authorities="ROLE_ADMINISTRATOR" password="123admin123" /> 
      </user-service> 
     </authentication-provider> 
     <authentication-provider ref="ldapActiveDirectoryAuthProvider"/> 
</authentication-manager> 

<bean id="ldapActiveDirectoryAuthProvider" 
     class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider"> 
    <constructor-arg value="myDomain.com" /> 
    <constructor-arg value="ldap://ldapurl:389/" /> 
    <property name="convertSubErrorCodesToExceptions" value="true"/> 
</bean> 

エラー私は例を見つけるのに苦労していますし、ドキュメントが、私は正しい方向に働いて示し

org.springframework.dao.IncorrectResultSizeDataAccessException: Incorrect result size: expected 1, actual 0  org.springframework.security.ldap.SpringSecurityLdapTemplate.searchForSingleEntryInternal(SpringSecurityLdapTemplate.java:239) 

取得しています。私はDNを取得する必要があります

これは、ログ

SpringSecurityLdapTemplate.java 213 - Searching for entry under DN '', base = 'dc=myDomain,dc=com', filter = '(&(objectClass=user)(userPrincipalName={0}))' 

からであり、これは、私はそれが

Searching for entry under DN 'OU=Users and Groups,DC=one,DC=two,DC=myDomain,DC=com', base = 'OU=Users and Groups,DC=one,DC=two,DC=myDomain,DC=com', filter = '(&(objectClass=user)(userPrincipalName={0}))' 

を操作する一部のスクリプトからの成功した試みで見えるように期待するものです人口は?どうやって?私はActiveDirectoryLdapAuthenticationProviderのプロパティを見て、方法が表示されませんか?また、ベースはオフになっていますが、myDomain.comはユーザーにとって正しいドメインです(例:[email protected])。誰も似たような問題に遭遇しましたか?

+0

問題のユーザーに対してフィルタが実際に有効ですか?そうでない場合は、[この問題では]報告された問題が発生している可能性があります(https://jira.springsource.org/browse/SEC-1915)。 –

+0

こんにちはルーク、ユーザーフィルタは有効ですが、ベースがあまり具体的でなく、DNが設定されていません.Ldapsearchコマンドラインツールをバネ値で使用しようとしています(DNはなく、 )私はエラーが発生しますが、 "OU ="値でフルベースを指定すると、正常に戻ります。私は参照がアクティブなディレクトリに問題を引き起こす可能性があることを読んで、多分これは問題です。その間、私は他の認証プロバイダのことを見たり、何も動かなければ私自身のものを書くつもりです。ご協力いただきありがとうございます。 – Damien

+0

@ルーク・テイラー私は、ユーザー検索ベースを定義したldap-authentication-providerを使用しています。なぜActiveDirectory認証が機能しないのか分かりませんが、検索ベースが絞り込まれて正常に返されたときのように照会と関係していたと思います。 – Damien

答えて

1

これを解決するために、ユーザの検索ベースとユーザ検索フィルタを指定して、ユーザの検索ベースを指定できるデフォルトのLDAPプロバイダを使用しました。

<ldap-authentication-provider 
    user-search-base="OU=Users and Groups,DC=abc,DC=myDomain,DC=com" 
    user-search-filter="userPrincipalName={0}" /> 

ユーザが[email protected]でログインされるであろうが、usersearch塩基はより特異的である(abc.myDomain.com)。私はAD Springがこれによって落ちていたと信じています。