Номер ошибки и текст с сервера LDAP будут поучительными;но в общем случае выделяются две вещи:
(1) Предполагая, что у пользователя уже есть пароль, вы изменяете существующий атрибут, не добавляя атрибут.Если вы попытаетесь добавить значение в отдельный однозначный атрибут, у которого уже есть значение, или если вы попытаетесь добавить значение в уже существующий многозначный атрибут, вы получите ошибку ldap 20. To modify существующий атрибут будет выглядеть примерно так:
LDAPModificationSet attributes = new LDAPModificationSet();
LDAPAttribute attrUserPassword = new LDAPAttribute("userPassword", "{SSHA}"+encryptedPSWD);
attributes.add(LDAPModification.REPLACE, attrUserPassword);
(2) Некоторые каталоги не позволяют использовать «предварительно закодированные» пароли по умолчанию.Это связано с тем, что политики паролей не могут быть применены к неизвестному паролю (т. Е. Откуда мне знать, что этот пароль содержит не менее восьми символов, содержит специальный символ и не содержит слова из словаря?).Серверы Oracle Unified Directory, которыми я управляю, в этом случае возвращают ошибку 53 вместе с текстом «Предварительно закодированные пароли не разрешены для атрибута пароля userPassword.», Но другие серверы каталогов могут возвращаться с использованием другого кода (53 довольноуниверсальный код, который просто означает что-то в конфигурации сервера, не позволяет завершить действие).Как сортировать это зависит от сервера LDAP - у меня есть логика allow-pre-encoded-passwords Boolean в политике паролей.Обычно я устанавливаю «true» для пользователей массового импорта, затем возвращаю значение «false», чтобы разработчики приложений не могли обойти наши политики паролей.