Refresh tokens

Refresh token — долгоживущий токен для обновления короткоживущего access_token без повторного логина. Ключевой для UX и безопасности OAuth 2.0.

Зачем два токена

Обмен

POST /token
grant_type=refresh_token
refresh_token=abc123
client_id=X

→ { access_token: "new", refresh_token: "новый!", expires_in: 900 }

Rotation (обязательно для public clients)

При каждом использовании refresh token — AS выдаёт новый refresh, старый инвалидирует. Плюсы:

Reuse detection (Auth0 pattern)

  1. Refresh token A → выдаётся B, A инвалидирован.
  2. Если кто-то опять шлёт A → атака. Отзываем B, C, D... всю family.
  3. Юзеру: "переавторизуйся".

Хранение

КлиентГде хранить
MobileKeychain (iOS), Keystore (Android)
Server-side webDB, session
SPAHttpOnly cookie (best) или IndexedDB (не localStorage — XSS)
CLI~/.config/app/tokens (chmod 600)

Sliding expiration

Refresh token имеет absolute и inactivity expiry:

Revocation

RFC 7009POST /revoke. Юзер выходит → отзови refresh. AS должен уметь.

См. также