私が使用しているもの:-Spring 3.1.3
そして問題は、有効な資格情報を使用してLDAP経由でActiveDirectoryに接続できないことです。
不正なパターンが原因なのか、userdnまたはurlのrootDnに関する構成の問題が原因なのかわかりません。一見、すべてが正しいように見えますが。
これは私の現在の春のセキュリティ設定ファイルです:
...
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="ldapAuthProvider" />
</security:authentication-manager>
<bean id="ldapAuthProvider"
class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg>
<bean id="bindAuthenticator" class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg ref="contextSource" />
<property name="userDnPatterns">
<list><value>sAMAccountName={0}</value></list>
</property>
</bean>
</constructor-arg>
</bean>
<bean id="contextSource"
class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<constructor-arg value="ldap://remotehost:port/OU=My%20Company,dc=domain,dc=subdomain"/>
<property name="userDn" value="CN=managerUserCN,OU=Users,OU=Test Accounts,OU=My Company,dc=domain,dc=subdomain/>
<property name="password" value="thePass"/>
</bean>
...
*実際のURL、組織、グループなどを記述データに置き換えました
*これはsAMAccountNameによる検索の要件です。
そして、doAuthentication:bindWithDnによってスローされたNamingExceptionは次のとおりです。
*org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1*
また、LDAP wikiで読んだ52eコードの解釈は、既存のユーザー名と存在しないユーザー名の両方の入力を開始しているため、完全には正しくありません。
私が言及しているのは:
注:ユーザー名は有効であるが、パスワード/資格情報が無効な場合に返されます。記載されているように、他のほとんどのエラーが表示されないようにします。
私のためではありません。
私は私の質問に対する答えを見つけました。
bindAuthenticationでuser-Searchプロパティを指定して取得しました。以前は、ベースディレクトリ(最初のパラメータ)を含めずにuserSearchオプションをテストしていました。したがって、ほとんどの場合、これは必須であり、認証を機能させます。
コード内:
<bean id="ldapAuthProvider"
class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg>
<bean id="bindAuthenticator" class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg ref="contextSource" />
<property name="userSearch" ref="userSearch"/>
</bean>
</constructor-arg>
</bean>
<bean id="userSearch"
class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch">
<constructor-arg>
<value>OU=My Company,DC=domain,DC=subdomain</value>
</constructor-arg>
<constructor-arg>
<value>(sAMAccountName={0})</value>
</constructor-arg>
<constructor-arg ref="contextSource" />
<property name="searchSubtree">
<value>true</value>
</property>
</bean>
おそらく私は同様の問題を抱えている人を助けることができます。
pD:別のオプションは、指定されたActiveDirectoryLdapAuthenticationProviderを使用することです
<bean id="ldapActiveDirectoryAuthProvider" class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
<constructor-arg value="domain.subdomain" />
<constructor-arg value="ldap://host:port" />
<property name="convertSubErrorCodesToExceptions" value="true"/>
</bean>
それもうまくいくようです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加