Ответ
Токены — это цифровые ключи для аутентификации и авторизации. Основные виды:
-
Access Token — короткоживущий токен (минуты/часы), который клиент предъявляет для доступа к защищенным ресурсам. Часто реализуется как JWT (JSON Web Token).
// Пример структуры JWT (Header.Payload.Signature) // Payload (полезная нагрузка): { "sub": "1234567890", "name": "John Doe", "iat": 1516239022, "exp": 1516242622 }Передается в заголовке:
Authorization: Bearer <token> -
Refresh Token — долгоживущий токен (дни/месяцы), используемый для получения нового Access Token'а без повторного ввода учетных данных. Хранится на стороне клиента максимально безопасно (например, в HttpOnly cookie).
-
Bearer Token — не конкретный вид, а способ использования токена. Указывает, что предъявитель (bearer) токена получает доступ. Именно так передаются Access Token'ы.
-
CSRF Token (Token-based CSRF Protection) — уникальное, секретное и непредсказуемое значение, генерируемое сервером и передаваемое клиенту (часто в скрытом поле формы). Нужен для защиты от межсайтовой подделки запросов.
<form action="/transfer" method="POST"> <input type="hidden" name="csrf_token" value="a1b2c3d4e5f6"> <!-- другие поля --> </form> -
API Key — статичный идентификатор, используемый для аутентификации вызовов API. Менее безопасен, чем схема с токенами, так как не имеет срока действия и часто передается в URL или заголовках. Пример:
https://api.example.com/data?api_key=your_secret_key
Для тестирования важно проверять:
- Валидацию срока жизни (
expclaim в JWT). - Обработку HTTP-кодов
401 Unauthorizedи403 Forbidden. - Механизм обновления пары Access/Refresh Token.
- Безопасную передачу (HTTPS) и хранение (не в localStorage для Production).
Ответ 18+ 🔞
А, токены, блядь! Ну, цифровые ключики, которые везде сую́т, чтобы понять — ты свой или левый мудак. Давай разжую, как есть, а то в этих мануалах нихуя не понятно.
Access Token — это типа пропуск на тусовку, но одноразовый, живёт минут пятнадцать, ну, может, час. Его ты суёшь охране (серверу) и проходишь к барам (ресурсам). Часто это JWT, такая хуйня в три части, где в серединке вся инфа о тебе лежит. Смотри, как выглядит:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516242622
}
exp — это когда он сдохнет, ёпта. И тащить его надо в заголовке: Authorization: Bearer <token>. То есть, типа, «эй, предъявитель этого куска текста — Джонни, впустите его».
Refresh Token — это уже не пропуск, а, блядь, членский билет в этот клуб. Долгоживущий, пиздец как. Его ты хранишь в самом надёжном месте — не в localStorage, а, например, в HttpOnly куке, чтобы никакой фронтенд-скрипт его не стырил. Когда Access Token сдох — ты этим билетом машешь и тебе выдают новый пропуск. Удобно, не надо каждый раз логин-пароль вбивать.
Bearer Token — это не отдельный вид, а способ, сука, использования. Как будто говоришь: «Кто этот токен принёс — тот и прав». Вот Access Token как раз так и передаётся — как Bearer.
CSRF Token — о, это отдельная песня, блядь! Это такая хитрая жопа, чтобы тебя не наебали. Представь: ты залогинился на банке, а тебе на почту приходит письмо «посмотри котиков», ты кликаешь, а там невидимая форма тебе все бабки на Казахстан переводит. Так вот, CSRF токен — это скрытое поле в форме, уникальное для каждой сессии. Сервер его сгенерил и ждёт. Если его нет или он не совпал — запрос нахуй.
<input type="hidden" name="csrf_token" value="a1b2c3d4e5f6">
Без этого значения — никаких переводов, пиздец.
API Key — это вообще старый дедовский способ, как отмычка простая. Постоянный ключ, который ты суёшь в каждый запрос, часто прямо в URL. Типа ?api_key=твой_секретный_ключ. Но он, блядь, опасный! Если его спалят — всё, твой аккаунт как подопытный кролик. У него срока годности нет, отозвать сложно. В общем, для продакшена — так себе идея, честно.
А теперь, блядь, что тестировать надо, чтобы не облажаться:
- Срок жизни (
exp) — что будет, если токен протух? Должна быть ошибка401 Unauthorized, а не тихое падение в бездну. - Коды ответов —
401(ты неизвестный мудак) и403(ты известный, но доступ тебе закрыт, пидор) должны чётко отрабатывать. - Обновление пары — работает ли схема «отдал старый Access Token и Refresh Token — получил новую пару»? А что, если Refresh Token тоже протух или его украли?
- Безопасность — всё летит по HTTPS? Токены не светятся в логах? Access Token не засунули в localStorage на продакшене (это, блядь, прямой путь к краже сессии)?
Вот так, коротко и по делу, без этих ваших заумных «инфраструктур идентификации». Просто запомни: токен — это не магическая хуйня, а просто строка, которую сервер умеет читать и проверять. А если не умеет — то это пиздец, а не авторизация.