2010-03-05 3 views
68

Как Digest Authentication отличается от базовой аутентификации, отличной от отправки учетных данных в виде обычного текста?Что такое дайджест-аутентификация?

+0

Отличное объяснение от @Gumbo прямо здесь: http://stackoverflow.com/a/5288679/591487 – inorganik

+2

Что-то, чего вы НИКОГДА НЕ должны использовать. Не защищает пароль в пути и требует, чтобы сервер хранил пароли в обычном режиме. – CodesInChaos

+1

Digest действительно обеспечивает лучшую безопасность в пути, чем обычная аутентификация для _unencrypted_ трафика, но она слаба. Меньше безопаснее использовать Basic auth в сочетании с SSL/TLS вместо этого, так как вы также можете хранить пароли на сервере зашифрованными. – rustyx

ответ

112

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

Сервер дает клиенту единовременный номер использования (nonce), который он объединяет с именем пользователя, царством, паролем и запросом URI. Клиент запускает все эти поля с помощью метода хеширования MD5 для создания хеш-ключа.

Он отправляет этот хэш-ключ на сервер вместе с именем пользователя и сферой, чтобы попытаться выполнить аутентификацию.

На стороне сервера такой же метод используется для генерации hashkey, только вместо того, чтобы вводить пароль, введенный в браузер, сервер просматривает ожидаемый пароль для пользователя из своей пользовательской базы данных. Он просматривает сохраненный пароль для этого имени пользователя, проходит через тот же алгоритм и сравнивает его с тем, что отправил клиент. Если они совпадают, то предоставляется доступ, в противном случае он может отправить обратно 401 Unauthorized (без входа или неудачного входа в систему) или 403 Запрещено (доступ запрещен).

Дайджест аутентификации standardized in RFC2617. Там в nice overview of it on Wikipedia:

Вы можете думать об этом так:

  1. Клиент делает запрос
  2. Клиент получает обратно одноразовый номер с сервера и запрос 401 аутентификации
  3. клиент отправляет обратно следующий ответ array (username, realm, generate_md5_key (nonce, username, realm, URI, password_given_by_user_to_browser)) (да, это очень упрощено)
  4. Сервер принимает имя пользователя и область (плюс он знает URI, который запрашивает клиент), и он ks введите пароль для этого имени пользователя. Затем он идет и делает свою собственную версию generate_md5_key (nonce, username, realm, URI, password_I_have_for_this_user_in_my_db)
  5. Он сравнивает вывод generate_md5(), который он получил с отправленным клиентом, если они соответствуют клиенту, отправил правильный пароль. Если они не совпадают, пароль был ошибочным.
+0

Хорошее объяснение. Имя пользователя & pwd для пользователя Windows? Откуда они созданы? – SoftwareGeek

+0

Они все, что пользователь вводит в браузер. Пароль должен соответствовать тому, что хранился сервер для пароля для этого пользователя. Скорее всего, это не что-то конкретное для этого веб-приложения, а не для вашего пароля Windows. Это очень зависит от способа объединения веб-приложения. –

+7

Этот ответ 6 лет, но я думаю, что все системы, защищенные системой безопасности, хранят пароли в формате соленой хеширования. Существует нет и не должно быть метода получения исходного пароля из базы данных, что делает невозможным авторизацию дайджеста. –

10

Хеш учетных данных отправляется по кабелю.

HA1 = MD5(username:realm:password) 

Wikipedia has an excellent article on this topic

+0

от клиента к серверу?Не могли бы вы предоставить шаги для взаимодействия? Статья в Википедии хорошая, но мне нужно лучшее объяснение или пример. – SoftwareGeek

+0

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

1

Единственный способ получить хэш HA1 учетных данных - это узнать пароль. Сервер знает HA1, но не пароль, который сгенерировал его. Если HA1 был известен злоумышленнику, он мог войти в систему. Поэтому он не отправляется по проводам. Еще один хеш, основанный на nonce и т. Д., Выполняется до этого, и это должно совпадать с аналогичным вычислением, выполненным на сервере. Таким образом, до тех пор, пока сервер сохраняет HA1 private, система защищена.

+0

Это объяснение для аутентификации Digest, где пароль не отправляется в виде обычного текста (что имеет место для Basic Auth) –

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