Добавление пользователя с паролем в Active Directory LDAP

это мой первый раз на StackOverflow, я надеюсь получить некоторые ответы здесь. Я использую Windows Active Directory 2008 для хранения нового пользователя из java с помощью API spring-ldap

Моя проблема в том, что я не могу добавить пользователя с паролем. Где-то читал, что в AD для установки пароля надо использовать атрибут unicodePwd. Источник: http://geekswithblogs.net/lance/archive/2005/08/19/LdapAuthenticationASP.aspx

public void insertContact(ContactDTO contactDTO) {
    try{

     Attributes personAttributes = new BasicAttributes();
     BasicAttribute personBasicAttribute = new BasicAttribute("objectclass");
     personBasicAttribute.add("person");
     personBasicAttribute.add("user");
     personAttributes.put(personBasicAttribute);

      personAttributes.put("givenName", contactDTO.getCommonName());
      personAttributes.put("cn", contactDTO.getCommonName());
      personAttributes.put("sn", contactDTO.getLastName());
      personAttributes.put("description", contactDTO.getDescription());

      personAttributes.put("unicodePwd",
          this.createUnicodePassword(contactDTO.getPassword()) );
      personAttributes.put("userPrincipalName", contactDTO.getUserLoginName());
      personAttributes.put("sAMAccountName", contactDTO.getsAMAccountName());
      personAttributes.put("displayname", contactDTO.getDisplayname());
      //  personAttributes.put( "pwdLastSet", "0" );
      //  personAttributes.put( "LockOutTime", "0" );

      personAttributes.put("userAccountControl", "544");

      BasicAttribute roomAttribute = new BasicAttribute("roomNumber");
      for(String r : contactDTO.getRoomNumber())
      {
        roomAttribute.add(r);
      }

      personAttributes.put(roomAttribute);


      DistinguishedName newContactDN = new DistinguishedName();
      newContactDN.add("cn", contactDTO.getCommonName());

      ldapTemplate.bind(newContactDN, null, personAttributes);
    }

public byte[] createUnicodePassword(String password){
    return toUnicodeBytes(doubleQuoteString(password));
}

private byte[] toUnicodeBytes(String str){
    byte[] unicodeBytes = null;
    try{
        byte[] unicodeBytesWithQuotes = str.getBytes("Unicode");
        unicodeBytes = new byte[unicodeBytesWithQuotes.length - 2];
        System.arraycopy(unicodeBytesWithQuotes, 2, unicodeBytes, 0,
            unicodeBytesWithQuotes.length - 2);
    } catch(UnsupportedEncodingException e){
        // This should never happen.
        e.printStackTrace();
    }
    return unicodeBytes;
}

private String doubleQuoteString(String str){
    StringBuffer sb = new StringBuffer();
    sb.append("\"");
    sb.append(str);
    sb.append("\"");
    return sb.toString();
}

но он выдал мне код ошибки 53

enter code here: org.springframework.ldap.UncategorizedLdapException: Operation failed; nested exception is javax.naming.OperationNotSupportedException: [LDAP: error code 53 - 0000001F: SvcErr: DSID-031A11E5, problem 5003 (WILL_NOT_PERFORM), data 0

я не знаю, как установить пароль пользователя в AD. Я также читал, где установить unicodePwd, нам нужен SSL, если это требуется, чем то, как я могу это сделать. есть ли альтернатива для решения этой проблемы, пожалуйста, помогите мне


person Community    schedule 01.12.2010    source источник
comment
Во время тестирования я обнаружил, что вместо использования кодировки Unicode и удаления спецификации вы можете просто использовать UTF-16LE в качестве кодировки, например. ('' + пароль + '').getBytes(UTF-16LE).   -  person Bill Brasky    schedule 13.09.2013


Ответы (1)


Да, ошибка WILL_NOT_PERFORM — это сообщение AD о том, что для установки пароля необходимо использовать соединение SSL.


Чтобы установить SSL-соединение, вам нужно использовать URL-адрес, который выглядит так: ldaps://your.ldap.server:636 (обратите внимание на «ldaps»). Если вы получите ошибку проверки сертификата, вам нужно будет использовать «keytool» для импорта сертификата сервера AD в ваше хранилище ключей Java, чтобы ваше приложение Java распознало сертификат как действительный.

person David Gelhar    schedule 01.12.2010
comment
хорошо, Дэвид, вы можете знать, как я могу использовать SSL с Ldap, пожалуйста, можете ли вы показать полное руководство, которое я никогда не знаю о SSL с Ldap ... есть ли какая-либо альтернатива для этого, я просто хочу установить пароль пользователя, поэтому любая служба Windows, которая может решить эту проблему проблема, и я не реализую логику SSL, пожалуйста, сообщите мне - person ; 01.12.2010
comment
хорошо, спасибо за ваш ответ .. хорошо, я знаю, что такое URL и порт SSL с AD, но я не могу импортировать сертификаты с сервера AD. очень сожалею, не могли бы вы рассказать мне, как я могу получить эти сертификаты, и сколько сертификатов требуется для этого процесса. - person ; 01.12.2010
comment
Это отдельная тема. Вот несколько инструкций о том, как это сделать с другим приложением (Crowd) confluence.atlassian.com/display/CROWD/ -- не относится к Spring-LDAP, но основные принципы те же: получите сертификат с сервера AD, импортируйте его в Хранилище ключей Java с использованием keytool - person David Gelhar; 01.12.2010
comment
хорошо, спасибо, Дэвид, я буду следить за этим и дам вам знать, пожалуйста, оставайтесь на связи, если я почувствую какие-либо трудности, я дам вам знать .. - person ; 01.12.2010
comment
привет. У меня есть вопрос относительно создания сертификата из AD. я следую вашей ссылке, а также немного погуглил, я думаю, что нам нужно использовать третью сторону для выдачи этого сертификата. я просто хочу настроить все это для своей тестовой среды, скажите мне, как я могу обойти генерацию сторонних сертификатов... - person ; 06.12.2010
comment
sslshopper.com/ я следую этой статье, чтобы сгенерировать файл.. но, как упоминалось, мы приказываем центру сертификации создать SSL-сертификат для нас, но я полностью в тестовой среде, пожалуйста, скажите мне, как я сгенерирую сертификат для использования SSL-соединения для создания пользователя с паролем - person ; 06.12.2010
comment
Вам необходимо установить службы сертификации Active Directory — шаг за шагом можно найти по адресу gregtechnobabble.blogspot.cz/2012/11/ . - person Xdg; 03.01.2016
comment
@DavidGelhar Эй, я установил SSL-соединение и добавил сертификат в Java Kestore, но все еще получаю сообщение об ошибке javax.naming.CommunicationException: simple bind failed: 192.168.0.5:636 [Root exception is java.net.SocketException: Connection or outbound has closed], вы можете помочь? - person Nirav Madariya; 23.02.2019