Как включить пользователя через LDAP в AD? - PullRequest
3 голосов
/ 23 августа 2011

В моей программе (на основе jldap) я пытаюсь включить пользователя в AD, установив для userAccountControl значение 512. Пользователь создан со следующими атрибутами:

objectClass=user
cn=username
name=username
userAccountControl=512
userPassword={BASE64}<base64 encoded password>
sAMAccountName=username
distinguishedName=username,CN=Users,DC=company,DC=com

Но я получаю исключение:

LDAPException: Unwilling To Perform (53) Unwilling To Perform
LDAPException: Server Message: 0000052D: SvcErr: DSID-031A0FC0, problem 5003 (WILL_NOT_PERFORM), data 0

Может быть, кто-нибудь может сказать мне, где я делаю ошибку? Может быть, я забыл какой-то обязательный атрибут?

EDIT:

Мой код (он тривиален, и я думаю, что в нем нет ошибок):

LDAPConnection connection;
LDAPMessageQueue messageQueue;
...
LDAPAttributeSet attributes = new LDAPAttributeSet();
attributes.add(new LDAPAttribute("objectClass", "user"));
attributes.add(new LDAPAttribute("cn", "username"));
attributes.add(new LDAPAttribute("name", "username"));
attributes.add(new LDAPAttribute("userAccountControl", "512"));
attributes.add(new LDAPAttribute("userPassword", "{BASE64}<base64 encoded password>"));
attributes.add(new LDAPAttribute("sAMAccountName", "username"));
attributes.add(new LDAPAttribute("distinguishedName", "username,CN=Users,DC=company,DC=com"));

LDAPEntry entry = new LDAPEntry("CN=username,CN=Users,DC=company,DC=com", attributes);
connection.add(entry);

1 Ответ

4 голосов
/ 23 августа 2011

Эта ошибка может возникнуть, если пароль неправильно закодирован.Убедитесь, что это строка UTF-16LE в кодировке Base64.

Пример (если вы используете Oracle JVM)

String pass = "password";
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
String encoded = enc.encode(pass.getBytes("UTF-16LE"));

ОБНОВЛЕНИЕ 1: Вы пытались запустить свой код без атрибута userAccountControl (дляисключить или исключить, что это действительно тот атрибут, который вызывает проблемы)?

Я заметил, что ваш атрибут отличительного имени также выглядит немного странно.Вероятно, он должен выглядеть примерно так: CN=username,OU=Users,DC=company,DC=com.

ОБНОВЛЕНИЕ 2: см. Добавление пользователя с паролем в Active Directory LDAP .WILL_NOT_PERFORM может быть возвращено, если вы пытаетесь установить пароль для записи (которой вы являетесь, поскольку вы ее создаете) через соединение без SSL.Необходимо убедиться, что вы подключаетесь к серверу AD по протоколу SSL (и при необходимости настраиваете сертификаты).

...