Ответ
Refresh Token — это долгоживущий учетный токен, используемый в протоколах аутентификации (например, OAuth 2.0, OpenID Connect) для получения нового Access Token без повторного ввода пользовательских учетных данных.
Как это работает (поток OAuth 2.0):
- Пользователь входит в систему, и сервер аутентификации выдает пару токенов:
- Access Token (короткоживущий, например, 15 минут) — для доступа к защищенным ресурсам (API).
- Refresh Token (долгоживущий, например, 7 дней) — хранится безопасно на стороне клиента.
- Когда Access Token истекает, клиентское приложение отправляет Refresh Token на специальную конечную точку (
/token). - Сервер проверяет Refresh Token и, если он валентен, выдает новую пару Access и Refresh токенов.
Пример HTTP-запроса для обновления:
POST /oauth/token HTTP/1.1
Host: auth.server.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=abc123def456...&client_id=your_client_id
Ключевые характеристики и best practices:
- Безопасное хранение: Refresh Token должен храниться на стороне сервера (для веб-приложений) или в защищенном хранилище (Keychain/Keystore для мобильных приложений), но НИКОГДА не в браузере (например, localStorage).
- Отзыв (Revocation): Сервер должен иметь возможность отозвать скомпрометированные Refresh Tokens.
- Одноразовость: После использования Refresh Token для выдачи новой пары, старый Refresh Token часто аннулируется (реализация "ротации токенов").
- Узкая область действия (Scope): Refresh Token обычно имеет те же разрешения, что и исходный Access Token.
Зачем это нужно?
- Безопасность: Короткая жизнь Access Token минимизирует ущерб в случае его утечки.
- Удобство пользователя: Пользователь остается аутентифицированным долгое время без повторных логинов.
- Масштабируемость: Позволяет избежать частых проверок учетных данных в основной базе данных.
Ответ 18+ 🔞
А, слушай, смотри, это ж про ту самую магию, когда ты залогинился раз и тебя потом неделю не выкидывает, хотя пароль ты уже забыл, как звали твою первую училку! Это всё он, ёпта, Refresh Token, хитрая жопа!
Представь: ты пришёл в закрытый клуб (это наш API). На входе тебе дают два билета:
- Access Token — это как браслетик на вечер. Красивый, блестит, но действует, блядь, всего 15 минут. Прошло время — и тебя, полупидора, выпроваживают на мороз.
- Refresh Token — это, сука, твоя пожизненная карта лояльности, но только если ты не начинаешь ебашить бармена. Она у тебя в сейфе дома лежит (НЕ В КАРМАНЕ, МУДАК! Не в
localStorage!).
И вот твой браслетик просрочился. Ты не бежишь снова паспорт показывать, а просто суёшь эту самую карту лояльности в специальную дырочку на стене (/token). Тебе автомат выплёвывает НОВЫЙ браслетик и, часто, НОВУЮ карту лояльности. Старую съедает, чтобы ты её не продал какому-нибудь левому челу.
Вот как это выглядит в дикой природе, код не трогаю, он святой:
POST /oauth/token HTTP/1.1
Host: auth.server.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token&refresh_token=abc123def456...&client_id=your_client_id
А теперь правила, чтобы не обосраться, как Герасим с Муму:
- Где хранить? Да в пизду, только не в браузере! На своём бэкенде, в тайной комнате. Для телефона — в этих ихних сейфах (Keychain/Keystore). Иначе придёт злой дядя и украдёт твою «пожизненную карту».
- Можно отозвать? А то, блядь! Если почуял, что карту скомпрометировали — сразу в чёрный список её, и всё, пидарас шерстяной больше не получит новых браслетиков.
- Одноразовая? Часто — да, ёпта. Использовал раз для обновления — получил новую пару, а старая карта нахуй не нужна. Это называется «ротация», чтоб ты знал.
- На что имеет право? Обычно на то же самое, на что и первый Access Token. Если ты изначально мог только смотреть, то и обновлённый токен даст тебе только смотреть, а не «удалить всё нахуй».
А зачем этот цирк, спросишь?
- Безопасность, ебать! Украли твой короткий браслетик (Access Token) — ну, походят 15 минут от твоего имени и всё. А с долгой картой (Refresh) они уже годами могли бы гулять!
- Удобство. Сидишь себе, листаешь ленту неделями, и ни одного пароля. Красота!
- База данных не ебёт. Серверу не нужно каждый раз лезть в базу и проверять логин-пароль. Он просто смотрит на подпись токена и говорит: «А, это наш мудак, Герасим, пускай».
Вот и вся философия. Не сделаешь — будешь как тот немой, только «Муму» сказать не сможешь, будешь мычать «логин... пароль...» каждые 15 минут. Пиздец.