В чем разница между дайджестом и базовой аутентификацией? - PullRequest
164 голосов
/ 02 марта 2012

В чем разница между Дайджест и Базовая Аутентификация?

Ответы [ 3 ]

168 голосов
/ 02 марта 2012

Digest Authentication передает учетные данные в зашифрованном виде, применяя хеш-функцию к имени пользователя, паролю, предоставленному одноразовым значением на сервере, методу HTTP и запрошенному URI.

В то время как базовая аутентификация использует незашифрованную кодировку base64.

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

См. RFC-2617 для всех кровавых деталей.

90 голосов
/ 05 декабря 2015

Базовая аутентификация HTTP-доступа

  • ШАГ 1 : клиент запрашивает информацию, отправляя имя пользователя и пароль на сервер в виде простого текста
  • ШАГ 2 : сервер отвечает желаемой информацией или ошибкой

Базовая аутентификация использует кодировку base64 (не шифрование) для генерации нашей криптографической строки, которая содержит информацию об имени пользователя и пароле. HTTP Basic не нужно реализовывать через SSL, но если вы этого не сделаете, он вообще не защищен. Так что я даже не собираюсь развлекать идею использовать его без.

Плюсы:

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

Минусы:

  • SSL работает медленнее, чем базовый HTTP, поэтому клиенты становятся немного медленнее
  • Если у вас нет контроля над клиентами и вы не можете заставить сервер использовать SSL, разработчик может не использовать SSL, что создает угрозу безопасности

Вкратце - если у вас есть контроль над клиентами или вы можете гарантировать, что они используют SSL, HTTP Basic является хорошим выбором. Медлительность SSL может быть устранена скоростью только одного запроса

Синтаксис базовой аутентификации

Value = username:password
Encoded Value =  base64(Value)
Authorization Value = Basic <Encoded Value> 
//at last Authorization key/value map added to http header as follows
Authorization: <Authorization Value>

Аутентификация доступа к дайджесту HTTP
Дайджест-аутентификация доступа использует методологию хеширования (т. Е. Дайджест означает разрезание на мелкие кусочки) для генерации криптографического результата. Аутентификация доступа к дайджесту HTTP - более сложная форма аутентификации, которая работает следующим образом:

  • ШАГ 1 : клиент отправляет запрос на сервер
  • ШАГ 2 : сервер отвечает специальным кодом (называемым т.е. n umber используется только один раз ), другой строка, представляющая realm (хеш) и запрашивающая у клиента аутентификацию
  • ШАГ 3 : клиент отвечает этим одноразовым номером и зашифрованной версией имени пользователя, пароля и области (хеш)
  • ШАГ 4 : сервер отвечает запрошенной информацией, если хеш клиента совпадает с его собственным хешем имени пользователя, пароля и области, или ошибка, если нет

Плюсы:

  • Имена пользователей и пароли не отправляются на сервер в виде открытого текста, что делает соединение без SSL более безопасным, чем HTTP-запрос Basic, который не отправляется через SSL. Это означает, что SSL не требуется, что делает каждый вызов немного быстрее

Минусы:

  • Для каждого необходимого вызова клиент должен сделать 2, что делает процесс немного медленнее, чем HTTP Basic
  • HTTP Digest уязвим к атаке «человек посередине», что в основном означает, что его можно взломать
  • HTTP Digest предотвращает использование надежного шифрования паролей, что означает, что пароли, хранящиеся на сервере, могут быть взломаны

В заключение , HTTP Digest по своей природе уязвим по крайней мере для двух атак, тогда как сервер, использующий надежное шифрование паролей с HTTP Basic через SSL, с меньшей вероятностью разделяет эти уязвимости.

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

Синтаксис аутентификации доступа к дайджесту RFC 2069

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)

Синтаксис аутентификации доступа к дайджесту RFC 2617

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
//some additional parameters added 

источник и пример

В Почтальоне выглядит следующим образом:

enter image description here

Примечание:

  • Схемы Basic и Digest предназначены для аутентификации с использованием имени пользователя и секрета.
  • * Схема переноса предназначена для аутентификации с использованием токена.
32 голосов
/ 21 июля 2017

Давайте посмотрим на разницу между двумя HTTP аутентификациями с использованием Wireshark (Инструмент для анализа отправленных или полученных пакетов).

1. Http Basic Authentication

Basic

Как только клиент вводит правильное имя пользователя: пароль , в соответствии с запросом веб-сервера, веб-сервер проверяет в базе данных правильность учетных данных и предоставляет доступ к ресурсу ,

Вот как пакеты отправляются и принимаются:

enter image description here В первом пакете Клиент заполняет учетные данные, используя метод POST на ресурсе - lab/webapp/basicauth. В ответ сервер возвращает ответ с http-кодом ответа 200 ok , т. Е. С именем пользователя : пароль был верным.

Detail of HTTP packet

Теперь, в заголовке Authorization показано, что это Базовая Авторизация, за которой следует какая-то случайная строка. Эта строка является кодированной (Base64) версией учетных данных admin:aadd (включая двоеточие).

2. Http Digest Authentication (rfc 2069)

До сих пор мы видели, что базовая аутентификация отправляет имя пользователя: пароль в виде открытого текста по сети. Но Authe Digest отправляет HASH пароля с использованием алгоритма хеширования.

Вот пакеты, показывающие запросы, сделанные клиентом, и ответ от сервера.

Digest

Как только клиент вводит учетные данные, запрошенные сервером, пароль преобразуется в response с использованием алгоритма и затем отправляется на сервер, если база данных сервера имеет тот же ответ, что и клиент-сервер дает доступ к ресурсу, в противном случае возникает ошибка 401 .

Detailed digest auth packet В приведенном выше Authorization строка response вычисляется с использованием значений Username, Realm, Password, http-method, URI и Nonce, как показано на рисунке:

Response algorithm (двоеточия включены)

Следовательно, мы можем видеть, что дайджест-аутентификация более безопасна, поскольку включает хеширование (шифрование MD5), поэтому инструменты анализатора пакетов не могут прослушать пароль, хотя в режиме обычной аутентификации точный пароль был показан на Wireshark.

...