Подтвердить что ты не робот

Проверка подлинности HTTP-дайджеста

Я хочу использовать HTTP Digest Authentication с центральной базой данных, которая хранит имена пользователей и зашифрованные пароли. Эти данные должны использоваться различными серверами, например Apache httpd или Tomcat. Клиенты будут людьми с браузерами и другими приложениями, обменивающимися RESTful способом.

Насколько я понимаю, я не мог использовать таблицу с хешированными паролями. Это возможно только для хранения HA1 = MD5 (имя пользователя: царство: пароль), где требуется текстовый пароль - правильно?

С другой стороны, кажется, что можно использовать хэшированные пароли с Apache httpd:

Apache httpd doc говорит:

Первое значение столбца первого строка, возвращаемая оператором запроса должна быть строка, содержащая зашифрованный пароль.

Работает ли он с аутентификацией дайджеста? Нет параметра для указания алгоритма хеширования. Как Apache httpd определяет, какой алгоритм использовать?

RFC 2617 говорит:

4.13 Хранение паролей

Проверка подлинности дайджеста требует, чтобы аутентификационный агент (обычно сервер) хранят некоторые данные, полученные от имени пользователя и пароля в "файле паролей", связанном с данной области. Обычно это может содержат пары, состоящие из имени пользователя и H (A1), где H (A1) является переваренное значение имени пользователя, области, и пароль, как описано выше.

Похоже, пароль должен быть четким.

В спецификации Servlet 3.0 указано:

Хотя пароли не отправляются на провод, аутентификация HTTP-дайджеста требует, чтобы текстовый пароль эквиваленты должны быть аутентификации контейнера, чтобы он может проверять полученные аутентификаторы путем вычисления ожидаемого дайджеста.

Что такое "эквивалент текстового пароля" здесь? Хеш пароля?

Документация Tomcat говорит:

При использовании переваренных паролей с Проверка подлинности DIGEST, текст используемый для генерации дайджеста, является другой. В приведенных выше примерах {cleartext-password} необходимо заменить с {Имя пользователя}: {область}: {зашифрованный текст-пароль}. Например, в разработке окружающей среды это может иметь форму TestUser: локальный: 8080:. testPassword

Здесь требуется четкий текстовый пароль.

Итак, можно ли использовать аутентификацию HTTP Digest с уже зашифрованными паролями или иметь пароли для четкого текста?

Должен ли пользователь повторно вводить свои учетные данные, если он запрашивает страницу из другого субдомена?

Удаляет ли браузер кешированный пароль, когда вкладка закрыта или только когда все закрыто? Возможно, это отличается от браузера браузером - меня бы интересовал, в каком браузере его удалить и который его сохранит.

Общий вопрос: подходит ли дайджест-аутентификация для моего сценария с центральным пользователем db с уже зашифрованными паролями. Или мне лучше использовать одноранговую службу на основе сеанса?

4b9b3361

Ответ 1

В этом сценарии, когда у вас уже есть база данных хэшированных паролей, невозможно использовать аутентификацию дайджеста, поскольку они не были хэшированы с использованием той же функции.

Я думаю, что лучшим решением для вас здесь является создание страницы входа и использование сеансов cookie для управления привилегиями пользователей. С помощью этого решения вы получите ответ на другие вопросы:

  • Файл cookie может быть установлен для использования между субдоменами: http://en.wikipedia.org/wiki/HTTP_cookie#Cookie_attributes
  • Сессия будет действительна до тех пор, пока пользователи не закроют браузер, не истечет время ожидания или пользователи не нажмут кнопку выхода. Никогда не забудьте предложить этот вариант своим пользователям!

Ответ 2

Я думаю, вы можете сначала ввести пароль, введенный пользователем, с той же функцией, что и для хранения паролей в базе данных, а затем передать его в качестве пароля дайджеста, а остальная часть процедуры будет одинаковой.

и вам придется передавать имя пользователя и пароль в URL-адрес HTTP вместо обычной формы http://www.rojotek.com/blog/2008/05/19/http-authentication-in-a-url/