TGViewer
Кодерские работы 👾 Кодерские работы 👾 @coderw0rker · 104 subscribers
Post #220 42
🔐 Refresh Token Rotation


👨‍💻 Расскажу вам немного про механизм ротации токенов. В моём проекте NetWalker есть пользователи и вся сопутствующая логика авторизации.

❓ Но как серверу понять, что юзер это действительно конкретный юзер?

🎫 Тут нам помогает JWT токен (access_token), который сервер генерирует на небольшое время. Как только время жизни истекает, токен становится невалидным и юзера по идее должно выкинуть из системы.

🤦‍♂️ Но мы же не хотим видеть, как каждые 10-15 минут приложение просит логиниться заново.

💀 Можно было бы забить и выдать access_token со сроком жизни на месяц, но если его перехватят или украдут, то злоумышленник получит полный доступ к аккаунту на этот самый месяц.

💡 Решение проблемы: связка с refresh токеном и его обязательная ротация.

⚙️ Как устроен этот механизм:
🔹 Помимо короткоживущего access_token, сервер генерирует долгоживущий refresh_token (например, на 30 дней) и сохраняет его в базу данных.
🔹 К обычным запросам клиент прикрепляет access_token. Сервер быстро проверяет подпись: если всё ок, запрос проходит дальше.
🔹 Когда у access_token заканчивается срок, клиент делает отдельный запрос на эндпоинт обновления.
🔹 Сервер сверяет пришедший refresh_token с записью в базе данных. Если всё сходится, значит, запрос пришёл от реального владельца.

🔄 В этот момент и происходит ротация: сервер генерирует совершенно новую пару access и refresh токенов, а старый рефреш токен сразу аннулирует.

👌 Для пользователя сессия продлевается бесшовно и незаметно.

🤔 Но тут возникает вопрос: а что если refresh_token всё-таки украли?

🛡 Вот здесь и раскрывается главная фишка ротации для безопасности (Token Reuse Detection).

🚨 Если кто-то попытается использовать уже отработанный или устаревший refresh_token, сервер сразу видит нестыковку. Это явный сигнал о краже или повторном использовании, поэтому сервер моментально рубит всю сессию (аннулирует всю цепочку токенов пользователя) и принудительно требует залогиниться заново.

📌 Полезные рекомендации на заметку:
- Хранить токены в HttpOnly cookies.
- refresh_token необязательно делать в формате JWT, это может быть просто криптографически стойкая случайная строка.
- В БД лучше сохранять только хэш от refresh_token, а не сам токен в чистом виде.
- Обязательно гонять весь трафик через HTTPS для защиты от атак типа Man-in-the-Middle (MitM).


👨‍💻 В следующем посте покажу уже свою реализацию из кода, где я чутка оптимизировал эту схему.

#образовач
  • 🔥 4
  • ❤ 1
  • 👍 1
  • 💋 1
More from @coderw0rker
  1. Oct 1, 2026👨‍💻 Вышло завести OLED экранчик, запустил на нём Game of Life, хех.
  2. Sep 28, 2026🥰 Мои малютки пришли, приятно удивила упаковка, думал будет пластиковый пакет, а тут конт…
  3. Sep 27, 2026✍️ А вот и сам код)
  4. Sep 27, 2026⚙️ Реализация Refresh Token 📦 Для хранения сессии я использую класс UserSession (1). В нё…
  5. Sep 24, 2026👋 Есть кто живой? 😅 Как-то незаметно пролетел почти весь сентябрь, а последний пост был…
  6. Aug 5, 2026👨‍💻 А вот собственно и сам веб-сервис: прокинул туннель через Cloudflare, есть вероятнос…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →