2014-10-07 90 views
1

我使用: - 春3.1.3解決:無法通過LDAP使用Spring Security認證到目錄(Active Directory)中

而問題是我無法通過LDAP在Active Directory連接使用有效的憑證。

我不知道是否是由畸形模式或關於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> 

... 

*我已經通過描述性數據

*這是一個requeriment搜索由sAMAccountName賦取代了真實的URL,組織,團體等。

而且通過doAuthentication扔過NamingException:bindWithDn是下一個:

*org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1* 

而且52E,我對LDAP維基閱讀代碼的解釋是不完全正確的,因爲現推出兩種輸入一個現有的用戶名和不存在的用戶名。

林指的:

注:返回時的用戶名是有效的,但密碼/證書是無效的。將防止顯示大多數其他錯誤,如上所述。

不適合我。

對不起,我的英語和...

問候!

回答

0

我找到了我的問題的答案。

我在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> 

這似乎很好地工作過。

相關問題