在Salted SHA类型中的Spring LDAP身份验证错误凭据密码

问题描述:

我有一个使用REST服务进行LDAP身份验证的项目。我的LDAP配置有Salted SHA(SSHA)密码哈希方法。在使用Spring的LDAP身份验证最佳实践指南支持SHA方法时,我得到了错误凭据,而crendentials正常。在Salted SHA类型中的Spring LDAP身份验证错误凭据密码

我的配置类参考:

@Configuration 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .ldapAuthentication() 
       .userSearchFilter("uid={0}") 
       .contextSource(contextSource()) 
       .passwordCompare() 
        .passwordEncoder(new LdapShaPasswordEncoder()) 
        .passwordAttribute("userPassword"); 
    } 

    @Bean 
    public DefaultSpringSecurityContextSource contextSource() { 
     return new DefaultSpringSecurityContextSource(Arrays.asList("ldap://localhost:8389/"), "dc=springframework,dc=org"); 
    } 
} 

我的ldif配置;

dn: uid=ben,ou=people,dc=springframework,dc=org 
objectclass: top 
objectclass: person 
objectclass: organizationalPerson 
objectclass: inetOrgPerson 
cn: Ben Alex 
sn: Alex 
uid: ben 
userPassword: {SSHA}pcFdFhO/NS98EhTRup60PMkHMWFRDkJ3jUu1Zg== 

我的原始密码是Test1234。我的pom.xml文件;

<dependency> 
     <groupId>org.springframework.ldap</groupId> 
     <artifactId>spring-ldap-core</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-ldap</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>com.unboundid</groupId> 
     <artifactId>unboundid-ldapsdk</artifactId> 
    </dependency> 

如何使用我的用户名/密码验证与SSHA密码加密ldap服务器?

试试这个办法

auth 
     .ldapAuthentication() 
      .userSearchFilter("uid={0}") 
      .contextSource(contextSource()) 
      .passwordCompare().passwordAttribute("userPassword") 
      .and() 
      .passwordEncoder(passwordEncoder()); 

,并创建一个自定义密码编码器

private PasswordEncoder passwordEncoder() { 
    final LdapShaPasswordEncoder sha = new LdapShaPasswordEncoder(); 
    return new PasswordEncoder() { 
     @Override 
     public String encode(CharSequence rawPassword) { 
      return sha.encodePassword(rawPassword.toString(), null); 
     } 
     @Override 
     public boolean matches(CharSequence rawPassword, String encodedPassword) { 
      return sha.isPasswordValid(encodedPassword, rawPassword.toString(), null); 
     } 
    }; 
} 

我有同样的问题,它为我工作。

希望它可以帮助你!