尝试连接LDAP时如何解决“空编码密码”错误

时间:2019-05-13 11:12:05

标签: ldap spring-security-ldap

我正在尝试连接到公司的LDAP,并且遇到了很多麻烦。我解决了一个问题,突然间我得到了一个新的问题。 现在,我认为上下文定义良好并且具有连通性,但是它抱怨“空编码的密码”,我不知道该如何面对。 我正在尝试通过服务用户进行身份验证。

现在我正在使用以下代码:

    auth.ldapAuthentication()
    .userSearchBase("ou=xxxx,ou=yyyy")
    .userSearchFilter("SamAccountName={0}")
    .contextSource()
        .url("ldap://servername:389/dc=aaaa,dc=bbbb,dc=cccc")
            .managerDn("CN=serviceUserName,OU=uuuu,OU=yyyy,DC=aaaa,DC=bbbb,DC=cccc")
            .managerPassword("serviceUserPass")
    .and()
        .passwordCompare()
            .passwordEncoder(passwordEncoder())
                .passwordAttribute("password");

并且:

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

我遇到此错误:

  

2019-05-13 10:41:37.808 WARN 22928 --- [nio-8080-exec-6] o.s.s.c.bcrypt.BCryptPasswordEncoder:空的编码密码   2019-05-13 10:41:37.926错误22928-[nio-8080-exec-6] w.a.UsernamePasswordAuthenticationFilter:尝试对用户进行身份验证时发生内部错误。

     

org.springframework.security.authentication.InternalAuthenticationServiceException:[LDAP:错误代码16-00000057:LdapErr:DSID-0C090D70,注释:属性转换操作中的错误,数据0,v1db1

我尝试将PasswordEncoder函数更改为:

    @Bean
    public PasswordEncoder passwordEncoder() {
    return new PasswordEncoder() {
        @Override
        public String encode(CharSequence rawPassword) {
            return BCrypt.hashpw(rawPassword.toString(), BCrypt.gensalt(4));
        }
        @Override
        public boolean matches(CharSequence rawPassword, String encodedPassword) {
            return BCrypt.checkpw(rawPassword.toString(), encodedPassword);
        }
    };
    }

然后检查“ encodedPassword”变量是否为空(“ rawPassword”是我在登录页面中输入的变量)。该错误是:

  

java.lang.IllegalArgumentException:salt不能为空

我不知道这是否意味着它无法访问LDAP,密码是否无法编码,找不到用户...

真的很感谢任何帮助。

0 个答案:

没有答案