Генератор заголовка Basic Auth

Введите имя пользователя и пароль, чтобы получить заголовок Authorization: Basic и готовую к запуску команду curl, или вставьте существующий заголовок, чтобы увидеть содержащиеся в нём учётные данные.

Заголовок Authorization
Команда curl

Декодировать существующий заголовок

Работает полностью в браузере. Данные никуда не загружаются.

Как пользоваться

  1. Введите имя пользователя и пароль.
  2. Скопируйте сгенерированный заголовок Authorization в свой клиент или проверьте запрос с помощью команды curl.
  3. Чтобы прочитать существующий заголовок, вставьте его в раздел «Декодировать существующий заголовок» — появятся имя пользователя и пароль.

Как работает 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.

Почему не удаётся войти, если в пароле есть кириллица или символы с диакритикой?
Клиент и сервер могут по-разному понимать кодировку символов. RFC 7617 позволяет серверу объявить charset="UTF-8"; без этого старые серверы могут считать, что используется ISO-8859-1, и сравнивать другие байты.
Отправляется ли куда-нибудь мой пароль?

Нет. Заголовок формируется кодом JavaScript в вашем браузере, и ничего не передаётся. И всё же, если вы делитесь сгенерированной командой curl с другими, используйте тестовые учётные данные.