Как решить ошибку «Пустой кодированный пароль» при попытке подключения LDAP - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь подключиться к 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: соль не может быть нулевой

Я не знаю, означает ли это, что у него нет доступа к LDAP, если пароль не может быть закодирован, если он не находит пользователя ...

Любая помощь очень ценится.

...