Spring LDAP 不适用于 LDAP 模板

Posted

技术标签:

【中文标题】Spring LDAP 不适用于 LDAP 模板【英文标题】:Spring LDAP not working with LDAP template 【发布时间】:2020-12-21 18:01:33 【问题描述】:

我正在尝试使用 spring 连接到 LDAP 服务器 有关 LDAP 服务器的可用信息如下:

    主机/ip 端口 域 => ou=x,dc=y,dc=z 我没有关于过滤方法的任何信息,例如与用户名匹配的 uid = 0 或 cn = 0

这是我的代码

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.DefaultDirObjectFactory;
import org.springframework.ldap.core.support.LdapContextSource;

@Configuration
public class LdapConfiguration 
    
  @Bean
  public LdapContextSource contextSource() 
      LdapContextSource contextSource = new LdapContextSource();
      contextSource.setUrl("ldap://ip:port");
      contextSource.setBase("dc=y,dc=z");
      return contextSource;
  
    
    @Bean
    public LdapTemplate ldapTemplate() 
        LdapTemplate template = new LdapTemplate(contextSource());
    
        return template;
    

那么这里在另外一个类中就是认证方法

@Service
public class LdapUserServiceImpl implements LdapUserService, BaseLdapNameAware 

  @Autowired
  protected LdapTemplate ldapTemplate;
  
  @Autowired
  protected ContextSource contextSource;

  @Override
  public Boolean authenticate(String userDn, String credentials) 

      AndFilter filter = new AndFilter();
      filter.and(new EqualsFilter("uid", userDn));
      boolean authenticated = ldapTemplate.authenticate(LdapUtils.emptyLdapName(), filter.toString(), credentials);
      
      return authenticated;
   

      

我收到以下错误:

m.m.a.ExceptionHandlerExceptionResolver:已解决 [org.springframework.ldap.UncategorizedLdapException:未分类 LDAP 处理期间发生异常;嵌套异常是 javax.naming.NamingException:[LDAP:错误代码 1 - 000004DC:LdapErr: DSID-0C090A7D,注释:为了执行此操作 成功绑定必须在连接上完成。,数据0,v3839

我的问题是这个错误的原因是什么,如果没有模式被称为 uid=0 或者它是标准的,我该怎么办 另外,我尝试输入 ContextSource 初始化用户名和密码,尽管我认为它们不可用

  contextSource.setUserDn("uid=username,ou=x,dc=y,dc=z"); 
  contextSource.setPassword("password");

这给了我以下错误:

[nio-8005-exec-5] .m.m.a.ExceptionHandlerExceptionResolver:已解决 [org.springframework.ldap.AuthenticationException:[LDAP:错误代码 49 - 80090308:LdapErr:DSID-0C090453,评论:AcceptSecurityContext 错误,数据 52e,v3839

在application.properties文件中,我放了

spring.ldap.embedded.base-dn=dc=y,dc=z
spring.ldap.embedded.port=port

【问题讨论】:

【参考方案1】:

将 userDn 设置为 username@domainname.com。 contextSource.setUserDn("uid=username,ou=x,dc=y,dc=z"); 对我来说,ou=x 看起来是额外的,下面的语句应该使它起作用。 contextSource.setUserDn("uid=username,dc=y,dc=z");

问候 阿比

【讨论】:

非常感谢,但我的问题是我没有在配置类中设置 UserDn 的初始用户名

以上是关于Spring LDAP 不适用于 LDAP 模板的主要内容,如果未能解决你的问题,请参考以下文章

LDAP 身份验证不适用于 Jenkins

LDAP 身份验证不适用于 websvn

将 JAAS 用于具有 Spring 安全性的 LDAP 密码

用于身份验证的 Grails Spring Security X509 和用于权限的 LDAP

Spring-Ldap连接Ldap及简单的增删查改

基于 SAML 的 SSO 用于身份验证和 LDAP 用于授权 - Spring Boot Security