> base64url | jwt | url-safe <
// Base64url — вариант Base64 без заполнения, безопасный для URL и имён файлов
Совместимость с URL
Нет специальных символов URL — безопасно для query‑параметров и путей.
Стандарт JWT
Используется в JSON Web Tokens и спецификациях OAuth 2.0.
Необязательное заполнение
Символы заполнения (=) можно опустить для более «чистых» URL.
>> техническая информация
Как работает Base64url:
Base64url — это вариант Base64, который заменяет "+" на "-", а "/" на "_", делая результат безопасным для URL и имён файлов. Символ заполнения "=" часто опускают, так как он может вызывать проблемы в адресной строке.
Сравнение:
Base64: SGVsbG8+Pw== Base64url: SGVsbG8-Pw
Зачем использовать Base64url:
- >JWT‑токены
- >Потоки OAuth 2.0
- >Параметры запроса в URL
- >Кодирование имён файлов
- >Подписи Web‑API
>> часто задаваемые вопросы
Что такое Base64url?
Base64url — это вариант кодирования Base64, безопасный для URL и имён файлов. Он заменяет "+" на "-", "/" на "_" и при необходимости удаляет символы заполнения "=", чтобы избежать проблем с URL‑кодированием.
Почему нельзя использовать обычный Base64 в URL?
Обычный Base64 использует символы "+", "/" и "=", которые имеют особое значение в URL. "+" может интерпретироваться как пробел, "/" является разделителем пути, а "=" используется для параметров, что приводит к ошибкам разбора.
Где используется Base64url?
Base64url широко применяется в JWT (JSON Web Tokens), кодах авторизации OAuth 2.0, утверждениях SAML и в любых API, где требуется передавать бинарные данные в URL или заголовках HTTP.
Обязательно ли использовать заполнение в Base64url?
Нет, заполнение в Base64url является опциональным. Многие реализации его опускают, поскольку длину можно вычислить. В частности, спецификации JWT требуют отсутствия padding для более компактных URL.
// Отличия от Base64
| Base64 | Base64url |
|---|---|
| + | - |
| / | _ |
| = | — |
// Base64url в коде
JavaScript btoa(s).replace(/\+/g,'-').replace(/\//g,'_').replace(/=+$/,'')
Node.js Buffer.from(s).toString('base64url')
Python base64.urlsafe_b64encode(b).rstrip(b'=')
Go base64.RawURLEncoding.EncodeToString(b)
Padding s + '=' * (-len(s) % 4)
>> Другие вопросы
В: Почему в Base64url нет «=»?
О: Дополнение можно вычислить по длине, а «=» имеет особый смысл в URL и строках запроса. Поэтому JWT (RFC 7515) и многие API записывают Base64url без заполнения.
В: Как восстановить заполнение перед декодированием?
О: Посмотрите длину по модулю 4: остаток 2 → добавьте ==, остаток 3 → добавьте =, остаток 0 → ничего. Остаток 1 недопустим. Также замените - на +, а _ на /.
В: Base64url — это шифрование?
О: Нет, это лишь кодирование: любой может его обратить. Содержимое payload в JWT читаемо, поэтому не храните там секреты.