Аутентификация в HTTP представляет собой процесс проверки подлинности пользователя или клиента. Это важная часть системы безопасности, которая позволяет серверу убедиться, что доступ к его ресурсам получает именно тот, кто имеет на это право. В HTTP существует несколько типов аутентификации, среди которых самой простой является базовая аутентификация.
Базовая аутентификация
Базовая аутентификация, выглядит как окошко браузера запрашивающее логин и пароль при входе на сайт или какой-то из его разделов. Возможно вы даже сталкивались с таким запросом в интернете (пример).
Базовая аутентификация настраивается на серверной стороне, либо внутри приложения (сайта), либо внутри веб-сервера, например Nginx. Для этого указывается конкретная пара логин/пароль для определенного пути в браузере. Пример с Nginx ниже:
server {
listen 80;
server_name hexlet.io;
# Путь для которого включается базовая аутентификация
location /secret-path/ {
# Сообщение, которое будет отображаться в диалоговом окне аутентификации
auth_basic "Секретная зона";
# Путь до файла в котором хранятся логин и закодированный пароль
auth_basic_user_file /etc/nginx/.htpasswd;
# Остальная конфигурация
proxy_pass http://backend_server;
}
}
Когда пользователь переходит на страницу, на которой настроена базовая аутентификация, серверная часть проверяет наличие логина и пароля в запросе. Передать их можно таким образом:
https://username:password@hexlet.io/secret-path
Если логин и пароль были переданы и они совпали с теми, что указаны на сервере, то запрос пройдет. Если они не совпали или не были переданы, то сервер возвращает код ответа: HTTP 401 Unauthorized. Ответ может сопровождаться заголовком WWW-Authenticate, указывающему клиенту на запрос логина и пароля. Именно поэтому браузер показывает окошко для ввода данных.
Логин и пароль, указанные в модальном окне, передаются на сервер в виде заголовка с закодированным сообщением:
GET /secret-path/ HTTP/1.1
Host: hexlet.io
Authorization: Basic aHR0cHdhdGNoOmY=
Когда логин и пароль введены, нас не просто пускает в закрытую зону, но и все дальнейшие запросы будут проходить, хотя мы больше ничего не вводим. После того как пользователь успешно аутентифицирован, браузер или клиент API автоматически включает заголовок Authorization с теми же учетными данными во все последующие запросы к тому же серверу (до тех пор, пока сессия не завершится или ресурс не изменится). Это значит, что сервер продолжает проверять логин и пароль на каждом запросе, но клиент всегда предоставляет их автоматически, поэтому пользователь не замечает повторных запросов аутентификации.
![Аватары экспертов Хекслета](https://cdn2.hexlet.io/assets/faces/mentors-756ab67c814cd4c22715666812a66c9dac9ac2d20176a10b0e932ee851a918e0.png)
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.