2017-06-02 118 views
1

我试图通过Spring Security进行LDAP身份验证。 但它返回一个错误:Spring Security返回52e

error code 49 - 80090308: LdapErr: DSID-0C0903D9, comment: AcceptSecurityContext error, data 52e, v2580 ]

我的代码:

auth.ldapAuthentication() 
      .contextSource().url("ldap://server:389/dc=main,dc=domain,dc=ru") 
      .managerDn("uid=user,ou=Domain Users,dc=mydomain,dc=ru").managerPassword("password") 
      .and() 
      .userSearchBase("ou=student") 
      .userSearchFilter("(cn={0})"); 
} 

什么可以在犯的错误(不包括错误的凭据)?

+0

不确定它是否是错误的来源,但搜索基础需要是一直贯穿根目录的RDN。例如:'ou = student,dc = main,dc = domain,dc = ru' – Esteban

+1

Microsoft AD。现在从uid更改为CN并连接到服务器。 但现在,另一个问题LDAP:错误代码32,问题2001(NO_OBJECT) )) –

+0

如何更正比较凭证与AD。我每次都得到401错误凭据。 我怎么能猜到它发生在错误的密码编码器。 或者我错了? –

回答

0

这是工作...也许任何人都会有所帮助 auth.authenticationProvider(ldapAuthenticationProvider()); auth.eraseCredentials(true);

@Bean 
public DefaultSpringSecurityContextSource contextSource(){ 

DefaultSpringSecurityContextSource contextSource = 
     new DefaultSpringSecurityContextSource(Arrays.asList("ldap://url:389/"),"dc=ttu,dc=ru"); 
contextSource.setUserDn(userDn); 
contextSource.setPassword(passwordForLDAP); 
contextSource.setReferral("follow"); 
return contextSource; 
} 

@Bean 
public LdapAuthenticationProvider ldapAuthenticationProvider(){ 
return new 
LdapAuthenticationProvider(ldapAuthenticator(),ldapAuthoritiesPopulator()); 
} 

@Bean 
public LdapAuthenticator ldapAuthenticator(){ 
BindAuthenticator authenticator = new BindAuthenticator(contextSource()); 
authenticator.setUserSearch(userSearch()); 
return authenticator; 
} 

@Bean 
public DefaultLdapAuthoritiesPopulator ldapAuthoritiesPopulator(){ 
DefaultLdapAuthoritiesPopulator ldapAuthoritiesPopulator = 
     new DefaultLdapAuthoritiesPopulator(contextSource(),"ou=TTU"); 
ldapAuthoritiesPopulator.setSearchSubtree(true); 
ldapAuthoritiesPopulator.setIgnorePartialResultException(true); 
//ldapAuthoritiesPopulator.setGroupSearchFilter("member={0}"); 
ldapAuthoritiesPopulator.setRolePrefix("ROLE_"); 
ldapAuthoritiesPopulator.setConvertToUpperCase(true); 
return ldapAuthoritiesPopulator; 
} 

@Bean 
public FilterBasedLdapUserSearch userSearch(){ 
FilterBasedLdapUserSearch filterBasedLdapUserSearch = 
     new FilterBasedLdapUserSearch("","(sAMAccountName={0})",contextSource()); 
filterBasedLdapUserSearch.setSearchSubtree(true); 
return filterBasedLdapUserSearch; 
}