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

Posted

技术标签:

【中文标题】Spring Boot 进行 LDAP 身份验证的方式【英文标题】:The Spring Boot way to do LDAP authentication 【发布时间】:2020-08-07 19:15:00 【问题描述】:

我有以下可以使用 LDAP 对用户进行身份验证的工作代码。如您所见,它非常简单。但是我怎样才能以 Spring Boot 的方式做同样的事情呢?

     try 
            Hashtable<String, Object> env = new Hashtable<>();
            env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.PROVIDER_URL, “ldaps://xxxxxxxx.abcgroup.xyz.com:636”);
            env.put(Context.SECURITY_AUTHENTICATION, "simple"); // fixed value
            env.put(Context.SECURITY_PRINCIPAL, “myid@abcgroup.xyz.com”);
            env.put(Context.SECURITY_CREDENTIALS, "mypassword");
            new InitialDirContext(env);
           // authentication successful.
       catch (Exception exception) 
           // authentication failed.
      

【问题讨论】:

【参考方案1】:

首先你应该将你的连接信息写入一个配置文件,例如一个 ldap.yml 文件。

ldap:
  url: ldap://XXXXXXX:389/
  root: cn=root,dc=root,dc=com
  userDn: cn=root,dc=root,dc=com
  password: XXXXXX
  baseDN: dc=root,dc=com
  clean: true
  pooled: false

然后使用这些属性注入一个ldaptemplate bean,这是一个propeties类:

@ConfigurationProperties(prefix = "ldap")
public class LdapProperties 
private String url;
private String userDn;
private String password;
private String baseDN;
private String clean;
private String root;
private boolean pooled = false;

这是一个配置类:

@Configuration
@EnableConfigurationProperties(LdapProperties.class)
public class LdapConfiguration 
@Autowired
LdapProperties ldapProperties;
@Bean
public LdapTemplate ldapTemplate() 
    LdapContextSource contextSource = new LdapContextSource();
    contextSource.setUrl(ldapProperties.getUrl());
    contextSource.setUserDn(ldapProperties.getUserDn());
    contextSource.setPassword(ldapProperties.getPassword());
    contextSource.setPooled(ldapProperties.getPooled());
    contextSource.setBase(ldapProperties.getBaseDN());
    contextSource.afterPropertiesSet();
    return new LdapTemplate(contextSource);
   
   

然后您可以使用@Autowired Annotations。此注解允许 Spring 解析协作 bean 并将其注入到您的 bean 中。

    @Autowired
    LdapTemplate ldapTemplate;

使用 ldapTemplate,您可以像关系数据库一样进行 CRUD。当然,您也可以进行身份​​验证。 这是我第一次在***回答问题,欢迎大家指出我的错误。

【讨论】:

您好,抱歉回复晚了!其实我已经想出了如何解决我的问题。我的解决方案与您的不同。 如果可以的话可以分享一下你的解决方案吗?我也是ldap的初学者,有问题可以交流一下。

以上是关于Spring Boot 进行 LDAP 身份验证的方式的主要内容,如果未能解决你的问题,请参考以下文章

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

从 Spring Boot 应用程序使用 AD LDP 进行 LDAP 身份验证

Ldap 身份验证不适用于 Spring Boot

在 Spring Security(spring-boot 项目)中使用 ldap 凭据进行 Http 基本身份验证以保护休息服务调用

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

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