Использование String.equals сравнивает пароль и аутентифицирует пользователя с сервером LDAP. Имеет ли это смысл? - PullRequest
2 голосов
/ 26 октября 2010

Я работаю с довольно старой, большой CMS (TeamSite), и у нее есть пример, как подключить ее к серверу LDAP.Я прочитал пример, и он работает очень странным образом.Он просто сохраняет пароль в поле «userPassword», как и ожидалось, но выполняет проверку вручную вместо использования команды bind.

Это не имеет смысла для меня, но я могу ошибаться здесь, посколькуДо этого я работал с серверами LDAP.Есть ли у вас идеи, почему кто-то хотел бы сравнить пароль вручную вместо использования bind?

Вот как выглядит код:

  Attribute attrPassword = attrs.get("userPassword");
  if (attrPassword.size() > 0)
  {
    String storedPassword = new String((byte[])attrPassword.get(0));

    if (password.equals(storedPassword))
    {  
      ///.....

Ответы [ 2 ]

6 голосов
/ 26 октября 2010

Это тоже не имеет смысла для меня. Пароль в LDAP не должен быть реальным паролем, он должен быть хешем пароля. Если вы извлекаете поле и проводите сравнение, вам нужно знать, какой тип хэша он использует, и таким же образом хешировать пароль, который вы сравниваете. Также требуется, чтобы атрибут userPassword в LDAP был доступен для извлечения, что, как мне кажется, не обязательно.

Короче говоря, нет ... Я думаю, вы должны использовать bind.

2 голосов
/ 26 октября 2010

LDAP поддерживает сравнение по паролям, но в обратном направлении от того, как ваш код, кажется, делает это.

Как правило, клиент пытается сравнить, предоставляет пароль, сервер LDAP выполняет сравнение и возвращает значение true или false.

Ваш код выглядит так, как будто он пытается прочитать пароль из LDAPтогда сделайте сравнение в своем пространстве процесса.

Это вряд ли будет работать с большинством любых серверов LDAP, если только не известен метод хеширования и предварительно не указано значение storedPassword.

Вы можете рассмотреть bind против compare, если выхотите (или не хотите) событие входа в систему.Событие входа может быть полезно для отслеживания активности аккаунта.(Например, для соответствия PCI вы бы хотели, чтобы люди не были деактивированы из-за неактивности, что будет определяться при входе в систему).

...