Я пытаюсь внедрить 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}?