Весенняя аутентификация с использованием ActiveDirectoryldapauthenticationProvider и встроенного LDIFJAVA

Программисты JAVA общаются здесь
Anonymous
Весенняя аутентификация с использованием ActiveDirectoryldapauthenticationProvider и встроенного LDIF

Сообщение Anonymous »

Одним из моих клиентов требовалось аутентификацию пользователей против его корпоративного ActiveDirectory (LDAP). Поэтому я использовал стандартную ActivedirectoryldapauthenticationProvider и работает как очарование. < /p>

@Bean
public ActiveDirectoryLdapAuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider adProvider = new ActiveDirectoryLdapAuthenticationProvider(
ldapConfig.getLdapDomain(), ldapConfig.getLdapUrl(), ldapConfig.getLdapRoot());
adProvider.setConvertSubErrorCodesToExceptions(true);
adProvider.setUseAuthenticationRequestCredentials(true);
adProvider.setSearchFilter(ldapConfig.getLdapSearchFilter());
return adProvider;
}
< /code>

Проблема заключается в том, что клиенты AC скрыт за брандмауэром. Он работает после развертывания, но я не могу связаться с AC во время местного развития из -за политики безопасности. Итак, у меня была идея, что, возможно, для Dev Profile я буду использовать Embedded LDAP -сервер (Unboundid LDAP SDK для Java). Я не эксперт LDAP, но я каким -то образом сочинил простой файл LDIF, и он выглядит так: < /p>

dn: dc=test,dc=local
objectclass: top
objectclass: domain
objectclass: extensibleObject
dc: test
# Organizational Units
dn: ou=groups,dc=test,dc=local
objectclass: top
objectclass: organizationalUnit
ou: groups
dn: ou=people,dc=test,dc=local
objectclass: top
objectclass: organizationalUnit
ou: people
# Users
dn: uid=john,ou=people,dc=test,dc=local
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: John Doe
sn: John
uid: john
password: johnspassword
# Create Groups
dn: cn=administrators,ou=groups,dc=test,dc=local
objectclass: top
objectclass: groupOfUniqueNames
cn: administrators
ou: administrator
uniqueMember: uid=john,ou=people,dc=test,dc=local
< /code>

Я также настроил встроенные свойства LDAP: < /p>

spring.ldap.embedded.base-dn=dc=test,dc=local
spring.ldap.embedded.ldif=classpath:localldapactivedirectory.ldif
spring.ldap.embedded.port=12345
spring.ldap.embedded.url=ldap://localhost:12345/
spring.ldap.embedded.validation.enabled=false
< /code>

unboundid не имел никаких проблем с этим, но, как вы предполагаете, я сталкиваюсь с проблемой во время аутентификации: < /p>

[LDAP: error code 34 - Unable to parse bind DN 'john@test.local': Unable to parse string 'john@test.local' as a DN because it does not have an equal sign after RDN attribute 'john@test.local'.]; nested exception is javax.naming.InvalidNameException: [LDAP: error code 34 - Unable to parse bind DN 'john@test.local': Unable to parse string 'user_cms@test.com' as a DN because it does not have an equal sign after RDN attribute 'john@test.local'.]
< /code>

, чтобы показать вам целое изображение, я добавляю эту ошибку во время попытки аутентификации (в пользовательской службе аутентификации): < /p>

Authentication authentication = authenticationManagerBuilder.getObject()
.authenticate(authenticationToken);
< /code>

Я предполагаю, что он вызван тем фактом, что мой файл LDIF слишком прост. Это будет работать с поставщиком аутентификации Vanilla LDAP, но не с ActiveDirectoryLdapauthenticationProvider. < /p>

Есть ли кто -нибудь, кто знает, как «издеваться над» Activedirectory (LDAP) в файле LDIF, чтобы ActiviveRectoryLdapauthenticationProvider может использовать его во время аутентификации?

Подробнее здесь: https://stackoverflow.com/questions/602 ... and-embedd

Вернуться в «JAVA»