Spring Embedded LDAP не связывает хешированные пароли

Я пытаюсь внедрить Spring Boot LDAP Security и использую встроенный сервер LDAP unboundid-ldapsdk для тестирования (например, учебник здесь). Я настроил веб-защиту на использование привязки LDAP для аутентификации и успешно протестировал пароли с открытым текстом. Но если я изменю пароль на хешированную версию, аутентификация завершится неудачно. Я пропустил какую-то конфигурацию?

Вот моя конфигурация безопасности:

@Configuration
@EnableWebSecurity
public class MyWebSecurityConfiguration extends WebSecurityConfigurerAdapter
{

    ...

    @Override
    protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder)
        throws Exception
    {
        authenticationManagerBuilder.
            ldapAuthentication().
                userSearchFilter(this.ldapUserSearchFilter).
                userSearchBase(this.ldapUserSearchBase).
                contextSource(this.contextSource()).
                ldapAuthoritiesPopulator(this.authoritiesPopulator());
    }


    @Bean
    public DefaultSpringSecurityContextSource contextSource()
    {
        DefaultSpringSecurityContextSource securityContextSource =
            new DefaultSpringSecurityContextSource(
                Collections.singletonList(this.ldapUrl),
                this.ldapBaseDn);
        return securityContextSource;
    }

    ...

}

Встроенные свойства LDAP:

spring.ldap.embedded.ldif=classpath:ldap-test.ldif
spring.ldap.embedded.base-dn=dc=testing,dc=com
spring.ldap.embedded.port=8389

И файл LDIF:

dn: dc=testing,dc=com
objectclass: top
objectclass: domain
objectclass: extensibleObject
dc: testing

dn: ou=TestingUsers,dc=testing,dc=com
objectclass: top
objectclass: organizationalUnit
ou: TestingUsers

dn: uid=testUser,ou=TestingUsers,dc=testing,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Blah_1
sn: Blah_2
uid: testingUser
userPassword: pass

Используя эти настройки, я могу пройти аутентификацию с именем пользователя testingUser и паролем pass. Но если я использую хешированный пароль:

userPassword: {SHA}9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684

Я не могу пройти аутентификацию и получаю это исключение:

javax.naming.AuthenticationException: [LDAP: error code 49 - Unable to bind as user 'uid=testingUser,ou=TestingUsers,dc=testing,dc=com' because the provided password was incorrect.]

Спасибо за помощь!

ОБНОВЛЕНИЕ:

Я обнаружил, что с хешированными паролями я могу аутентифицироваться, введя сам хэш, а не исходный пароль. Так может быть, unboundid-ldapsdk не распознает нотацию {SHA}?


person Kasra Ferdowsi    schedule 09.06.2017    source источник


Ответы (1)


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

person omallo    schedule 26.06.2017