Как пользоваться
- Введите имя пользователя и пароль.
- Скопируйте сгенерированный заголовок Authorization в свой клиент или проверьте запрос с помощью команды curl.
- Чтобы прочитать существующий заголовок, вставьте его в раздел «Декодировать существующий заголовок» — появятся имя пользователя и пароль.
Как работает HTTP Basic-аутентификация
Basic-аутентификация описана в RFC 7617. Когда ресурс защищён, сервер отвечает кодом 401 Unauthorized с заголовком WWW-Authenticate: Basic realm="...". Тогда клиент соединяет имя пользователя и пароль через двоеточие, кодирует результат в Base64 и отправляет его с каждым запросом:
Authorization: Basic base64(username ":" password)
# Пример из RFC 7617: пользователь "Aladdin", пароль "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Браузеры проводят этот обмен сами и показывают окно входа, а скрипты и API-клиенты обычно отправляют заголовок уже с первым запросом, не дожидаясь запроса аутентификации от сервера. Поскольку двоеточие разделяет два значения, имя пользователя не должно его содержать, а пароль может. Сервер может добавить в свой запрос аутентификации charset="UTF-8", чтобы сообщить, что учётные данные с символами не из ASCII ожидаются в UTF-8.
Base64 — это не шифрование
Заголовок выглядит зашифрованным, но любой, кто его увидит, восстановит пароль за секунды с помощью декодера на этой странице или любого декодера Base64. Basic-аутентификация допустима только поверх HTTPS, где TLS шифрует заголовок при передаче. Также учитывайте, что:
- учётные данные передаются с каждым запросом, поэтому один-единственный запрос по обычному HTTP раскрывает их;
- прокси-серверы, балансировщики нагрузки и инструменты отладки могут записывать заголовок
Authorizationв журналы, если это явно не запрещено; - браузеры помнят введённые учётные данные, пока их не закроют, а стандартного способа выйти из системы нет.
Для публичных API лучше подходят отзываемые API-токены или OAuth. Basic-аутентификация остаётся разумным выбором для внутренних инструментов, тестовых сайтов и межсерверных вызовов поверх TLS.
Отправка заголовка из кода
# curl сам формирует заголовок
curl -u 'user:password' https://api.example.com/
// JavaScript fetch (btoa поддерживает только символы Latin-1)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })
# Python requests
requests.get(url, auth=('user', 'password'))
Не встраивайте учётные данные в URL, как в https://user:password@host/. RFC 3986 признаёт такую форму устаревшей, она попадает в историю браузера и журналы сервера, а современные браузеры её ограничивают.
Часто задаваемые вопросы
Как декодировать заголовок Basic Auth?
Вставьте заголовок в раздел «Декодировать существующий заголовок», и имя пользователя и пароль сразу появятся. Любой декодер Base64 даст тот же результат — именно поэтому заголовок должен передаваться только по HTTPS.
Может ли пароль содержать двоеточие?
Да. Сервер разделяет декодированное значение по первому двоеточию, поэтому всё, что идёт после него, относится к паролю. А вот имя пользователя двоеточия содержать не должно.
Безопасна ли HTTP Basic-аутентификация?
При использовании HTTPS и надёжного уникального пароля она защищает учётные данные при передаче, но они отправляются с каждым запросом и не могут истечь, как токен. Никогда не используйте её по обычному HTTP.
Почему не удаётся войти, если в пароле есть кириллица или символы с диакритикой?
charset="UTF-8"; без этого старые серверы могут считать, что используется ISO-8859-1, и сравнивать другие байты.Отправляется ли куда-нибудь мой пароль?
Нет. Заголовок формируется кодом JavaScript в вашем браузере, и ничего не передаётся. И всё же, если вы делитесь сгенерированной командой curl с другими, используйте тестовые учётные данные.