Что такое токен авторизации и для чего он используется?

Ответ

Токен авторизации — это цифровой ключ (обычно строка), который выдается сервером после успешной аутентификации пользователя и подтверждает его права доступа к защищенным ресурсам. Клиент использует токен в последующих запросах вместо повторной передачи учетных данных.

Как это работает (поток OAuth 2.0):

  1. Пользователь вводит логин/пароль в клиенте.
  2. Клиент отправляет их на сервер аутентификации.
  3. Сервер проверяет данные и выдает Access Token (и часто Refresh Token).
  4. Клиент прикладывает токен к запросам в заголовке Authorization: Bearer <token>.
  5. Сервер ресурсов проверяет валидность токена и предоставляет доступ.

Пример JWT-токена (состоит из 3 частей, разделенных точками):

# Заголовок.Полезная нагрузка.Подпись
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0IiwidXNlcm5hbWUiOiJKb2huRG9lIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyNDI2MjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Расшифровка полезной нагрузки (payload):

{
  "sub": "1234",
  "username": "JohnDoe",
  "role": "admin",
  "iat": 1516239022, // issued at (время выдачи)
  "exp": 1516242622  // expiration (срок действия)
}

Ключевые характеристики и best practices:

  • Короткий срок жизни (TTL): Access Token живет минуты/часы, чтобы минимизировать риски при компрометации.
  • Обновление: Long-lived Refresh Token используется для получения нового Access Token без повторного ввода пароля.
  • Безопасная передача: Только по HTTPS.
  • Хранение на клиенте: В HttpOnly куках (защита от XSS) или в защищенном хранилище (например, Secure Store в мобильных приложениях).
  • Отзыв токенов: Сервер должен иметь механизм инвалидации скомпрометированных токенов.

Ответ 18+ 🔞

А, ну вот, токен авторизации, блядь! Это ж та самая хуйня, которую тебе сервер суёт в лапы, когда ты пароль ввёл и не облажался. Типа цифровой ключик, строка такая, понимаешь? Дальше ты её, эту строку, тыкаешь везде вместо логина с паролем, и тебе открывают дверцы.

Как эта махинация работает, по шагам:

  1. Ты, как лох, вбиваешь свои данные в форму.
  2. Твой комп шлёт их на сервер, типа «на, проверь, я свой».
  3. Сервер, если не мудак, говорит «окей» и выдаёт Access Token (а часто ещё и Refresh Token, про него потом).
  4. И теперь ты каждый раз, когда что-то просишь, прикладываешь этот токен в заголовке Authorization: Bearer <token>. Буквально «эй, я тот самый чувак, вот мой пропуск».
  5. Сервер ресурсов смотрит на пропуск, думает «а, ну окей, валидный», и даёт тебе доступ. Всё, пизда, ты в системе.

Вот смотри, как выглядит JWT-токен, три куска через точку:

# Заголовок.Полезная нагрузка.Подпись
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0IiwidXNlcm5hbWUiOiJKb2huRG9lIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNTE2MjM5MDIyLCJleHAiOjE1MTYyNDI2MjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

А если расшифровать середину (payload), то там такая инфа:

{
  "sub": "1234",
  "username": "JohnDoe",
  "role": "admin",
  "iat": 1516239022, // когда выдали (issued at)
  "exp": 1516242622  // когда сдохнет (expiration)
}

А теперь, сука, главные правила, чтобы не обосраться:

  • Живёт недолго: Access Token должен сдыхать быстро, через минуты или часы. Чтобы если его украли, то ворованный кусок дерьма быстро протух. Волнение, блядь, ноль.
  • Обновляшка: Для этого и нужен тот самый Refresh Token, долгоживущий. Он позволяет получить новый Access Token, не заставляя пользователя опять пароль вводить. Хитрая жопа, да?
  • Только по HTTPS: Передавать эту хуйню по открытому каналу — это прям приглашение всем желающим тебя поиметь. Ядрёна вошь!
  • Хранить с умом: На клиенте — либо в HttpOnly куках (чтоб JS не сожрал), либо в каком-нибудь защищённом хранилище приложения. Не тыкай в localStorage просто так, пидарас шерстяной!
  • Уметь отзывать: Сервер должен иметь возможность сказать «всё, этот токен — говно» и забанить его, если что. Иначе, если токен утек, то пиздец и приехали.