Как работает http://user:pass@host.com проверка подлинности работает?

#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