Ответ
Токен авторизации — это цифровой ключ (обычно строка), который выдается сервером после успешной аутентификации пользователя и подтверждает его права доступа к защищенным ресурсам. Клиент использует токен в последующих запросах вместо повторной передачи учетных данных.
Как это работает (поток OAuth 2.0):
- Пользователь вводит логин/пароль в клиенте.
- Клиент отправляет их на сервер аутентификации.
- Сервер проверяет данные и выдает Access Token (и часто Refresh Token).
- Клиент прикладывает токен к запросам в заголовке
Authorization: Bearer <token>. - Сервер ресурсов проверяет валидность токена и предоставляет доступ.
Пример 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+ 🔞
А, ну вот, токен авторизации, блядь! Это ж та самая хуйня, которую тебе сервер суёт в лапы, когда ты пароль ввёл и не облажался. Типа цифровой ключик, строка такая, понимаешь? Дальше ты её, эту строку, тыкаешь везде вместо логина с паролем, и тебе открывают дверцы.
Как эта махинация работает, по шагам:
- Ты, как лох, вбиваешь свои данные в форму.
- Твой комп шлёт их на сервер, типа «на, проверь, я свой».
- Сервер, если не мудак, говорит «окей» и выдаёт Access Token (а часто ещё и Refresh Token, про него потом).
- И теперь ты каждый раз, когда что-то просишь, прикладываешь этот токен в заголовке
Authorization: Bearer <token>. Буквально «эй, я тот самый чувак, вот мой пропуск». - Сервер ресурсов смотрит на пропуск, думает «а, ну окей, валидный», и даёт тебе доступ. Всё, пизда, ты в системе.
Вот смотри, как выглядит 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 просто так, пидарас шерстяной! - Уметь отзывать: Сервер должен иметь возможность сказать «всё, этот токен — говно» и забанить его, если что. Иначе, если токен утек, то пиздец и приехали.