Spring boot Ldap 身份验证失败,LDAP 错误代码 49 - 80090308 数据 52e

Posted

技术标签:

【中文标题】Spring boot Ldap 身份验证失败,LDAP 错误代码 49 - 80090308 数据 52e【英文标题】:Spring boot Ldap Authentication failing with LDAP error code 49 - 80090308 data 52e 【发布时间】:2018-02-22 23:54:25 【问题描述】:

我正在尝试在我的 web 应用程序中使用带有 spring security 的 LDAP 用户身份验证,但得到 error 52e,下面是我的 spring security ldap 身份验证代码:

protected void configure(AuthenticationManagerBuilder auth) throws Exception 
  auth.ldapAuthentication()
   .contextSource().url("ldap://192.168.1.5:389/DC=zonetest,DC=lk")
   .managerDn("CN=administrator@zonetest.lk,DC=zonetest,DC=lk").managerPassword("P@ssw0rd")
   .and()
   .userSearchBase("OU=SL Users")
   .userSearchFilter("(CN=0)");

截图中提供了我的 Ldap 结构供参考:

LDAP structure LDAP structure

我在邮递员客户端收到此错误


    "timestamp": 1505368170503,
    "status": 401,
    "error": "Unauthorized",
    "message": "[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v2580\u0000]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903C5, comment: AcceptSecurityContext error, data 52e, v2580\u0000]",
    "path": "/"

请帮帮我。

【问题讨论】:

您确定可以在您的姓名中使用空格吗? “SL 用户” 我已尝试删除 ou 名称中的空格并将 ou 设为“SLUsers”,但仍然是 Ldap 52e 错误。 (www-01.ibm.com/support/docview.wss?uid=swg21290631) 52e 用于无效凭据,因此用户可用,您确定您使用正确的凭据吗?您是否对密码进行了散列/加密? 不,我没有加密密码 【参考方案1】:

还有另一种简单的 ldap 身份验证方法。我使用下面的代码进行 ldap 身份验证。这对我来说就像一个魅力:

            package app.config;    
            import org.springframework.beans.factory.annotation.Value;
            import org.springframework.context.annotation.Bean;
            import org.springframework.context.annotation.Configuration;
            import org.springframework.security.authentication.AuthenticationManager;
            import org.springframework.security.authentication.AuthenticationProvider;
            import org.springframework.security.authentication.ProviderManager;
            import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
            import org.springframework.security.config.annotation.web.builders.HttpSecurity;
            import org.springframework.security.config.annotation.web.builders.WebSecurity;
            import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
            import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
            import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider;
            import java.util.Arrays;

            @Configuration
            @EnableWebSecurity
            public class WebSecurityConfigAD extends WebSecurityConfigurerAdapter 

             @Value("$ad.domain")
             private String AD_DOMAIN;

             @Value("$ad.url")
             private String AD_URL;

             @Override
             protected void configure(HttpSecurity http) throws Exception 
              http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
             

             @Override
             protected void configure(AuthenticationManagerBuilder authManagerBuilder) throws Exception 
              authManagerBuilder.authenticationProvider(activeDirectoryLdapAuthenticationProvider()).userDetailsService(userDetailsService());
             

             @Bean
             public AuthenticationManager authenticationManager() 
              return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
             
             @Bean
             public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() 
              ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(AD_DOMAIN, AD_URL);
              provider.setConvertSubErrorCodesToExceptions(true);
              provider.setUseAuthenticationRequestCredentials(true);

              return provider;
             
            

【讨论】:

以上是关于Spring boot Ldap 身份验证失败,LDAP 错误代码 49 - 80090308 数据 52e的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot/Spring Security 对 LDAP 进行证书身份验证

Ldap 身份验证不适用于 Spring Boot

通过 Tomcat 的 Spring Boot LDAP 身份验证(预身份验证)

Spring Boot 应用程序中的 LDAP 身份验证

Spring Boot 进行 LDAP 身份验证的方式

Spring Security - 在Spring Boot中针对LDAP使用Active Directory对用户进行身份验证