2016-12-16 9 views
-1

Я пытаюсь написать приложение, которое предложит пользователю управлять пользователями в системе LDAP. Одна из особенностей этого - функциональность «Forgot Password».LDAP: Как сбросить значение поля pwdReset

  1. Пользователь использует мое приложение сбросить свой пароль
  2. я задать несколько вопросов безопасности, и если они правильны, перенаправить его на новый экран - новый экран пароля.
  3. Пользователь вводит новый пароль (так как он забыл свой старый)
  4. Я использую admin Контекст и сбрасываю пароль пользователя (используя modifyAttributes(..)).
  5. Система LDAP, набор pwdReset до true, указывающий, что пароль был изменен администратором и должен быть изменен пользователем.

Теперь я хочу установить это как false, потому что я не хочу, чтобы пользователь снова менял свой пароль (как он уже делал выше), поэтому я явно изменяю его на false. Но я получаю ошибку

javax.naming.directory.SchemaViolationException: [LDAP: error code 65 - Object Class Violation]; remaining name 'cn=XXXX,ou=XXXXOU,O=XXXX' 

Каков путь вокруг? Есть ли другая альтернатива?

Для Другой крупный, код для сброса pwdReset как в соответствии с:

 List<ModificationItem> modsList = new ArrayList<ModificationItem>(); 
     BasicAttribute attribute = new BasicAttribute(ATTR_PASSWORDRESET, "false"); 
     modsList.add(new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attribute)); 
     ModificationItem [] modsArr = modsList.toArray(new ModificationItem[modsList.size()]); 
     modsArr = modsList.toArray(new ModificationItem[modsList.size()]); 
     this.adminCtx.modifyAttributes(userName, modsArr); 

enter image description here

А вот мой pwdPolicy

enter image description here enter image description here

+0

Итак, вы вообще не используете [tag: OpenLDAP], вы используете продукт IBM? Не помещайте без разбора. – EJP

ответ

0

Я только что провел два недели, доказывающие, что Open LDAP фактически не делает шаг № 5 вообще, несмотря на то, что означает формулировка проекта RFC. Я также нашел сообщение в архивах OpenLDAP Mail, подтверждающих, что они думают, что это не должно делать это. Так что происходит, что нет атрибута pwdReset для установки на false, так что вы получаете нарушение схемы, пытаясь до добавить с этим значением. Итак, все, что вам нужно сделать, это ничего.

Возможно, было бы безопаснее просто установить pwdReset на null, что полностью удалит его, или просто удалите его с помощью DirContext.REMOVE_ATTRIBUTE. Мой код не использует ModificationItem, что является еще одним ключом, больше похоже:

BasicAttributes attributes = new BasicAttributes(ATTR_PASSWORDRESET, null); 
this.adminCtx.modifyAttributes(userName, attrs); 

Вышесказанное также означает, что если вы хотите установить в TRUE вы должны сделать это самостоятельно.

+0

Я нахожусь в системе LDAP, и он устанавливает значение 'pwdReset' в true, когда я (как admin) сбрасывает пароль пользователя. Я попробовал ваш код, но он дает такое же исключение – SimpleGuy

+0

Я добавил скриншот – SimpleGuy

+0

Кстати, я считаю, что в вашем случае OpenLDAP ничего не делал. Политика паролей не была включена. – SimpleGuy

 Смежные вопросы

  • Нет связанных вопросов^_^