#http #web #http-authentication
#http #веб #http-аутентификация
Вопрос:
Кто-нибудь может объяснить, как http://user:pass@host.com аутентификация работает? Отправляет ли браузер Authorization
заголовок с user:pass
кодировкой base-64?
Я открыл сетевую консоль в Chrome developer tools, и когда я делаю запрос, например, http://user:pass@stackoverflow.com
я не вижу Authorization
добавляемого заголовка.
Мне действительно любопытно, как браузер отправляет пароль в случае, если я использую user:pass@
перед URL.
Комментарии:
1. Это просто заголовки авторизации. Я не знаю, как Chrome это делает, но в Firefox он проверяет, запрашивает ли сайт аутентификацию (в запросе), и если это не так, предупреждает вас об этом
You are about to log in to the site "stackoverflow.com" with the username "user", but the website does not require authentication. This may be an attempt to trick you. Is "stackoverflow.com" the site you want to visit?
, а затем либо [Да] удаляет данные аутентификации, либо [Нет] прерывает запрос. Поэтому, если у вас нет удобного сайта с авторизацией, вы не увидите заголовки.
Ответ №1:
Чтобы проверить заголовки, вам необходимо протестировать их на сервере, который требует аутентификации. Клиент не будет отправлять какой-либо Authorization
заголовок, пока сервер не запросит его, поскольку клиент не будет знать, какой метод аутентификации требуется серверу (базовый или дайджест).
HTTP-аутентификация выполняется в двух запросах:
Сначала отправляется запрос без какого-либо Authorization
заголовка. Затем сервер отвечает WWW-Authenticate
, сообщая клиенту, как пройти аутентификацию. Это включает в себя имя области и метод аутентификации (опять же, это либо базовый, либо дайджест)
Затем клиент отправляет новый запрос с дополнительным Authorization
заголовком. В случае базовой аутентификации этот заголовок просто user:pass
закодирован в base64, как вы и говорите:
Authorization: Basic dXNlcjpwYXNz
Теперь пароль виден при передаче, если вы не используете https. Лучшим вариантом является дайджест-аутентификация, где содержимое обоих WWW-Authenticate
и Authorization
лучше всего объясняется в статье Википедии. 🙂
Комментарии:
1. Спасибо — этот ответ привел меня к этому примеру: gist.github.com/neolitec/8953607