Skip to content

REL-3: Refresh-токены и отзыв #89

Description

@ii-reviewer

Цель: дать короткоживущий access-токен с обновлением и возможность мгновенно отозвать доступ.
Зависимость: #10, USR-1.

Что сделать

  • Ввести пару access (короткий TTL) + refresh (длинный). POST /api/auth/refresh обменивает refresh на новый access с ротацией refresh (старый сразу инвалидируется).
  • POST /api/auth/logout — отзыв текущего refresh (и access до истечения).
  • Хранить состояние токенов в Redis: whitelist валидных refresh либо blacklist отозванных access (с TTL = остаток жизни токена, чтобы не копить мусор).
  • При деактивации пользователя (USR-1 DELETE /api/users/{id}) — отозвать все его токены.
  • Стретч: деактивированный юзер теряет доступ мгновенно, а не по истечении access-токена — продумать, как фильтр проверяет отзыв на каждом запросе, не убив производительность (Redis-lookup, не БД).
  • Защита от reuse украденного refresh: повторное использование уже ротированного refresh → отозвать всю цепочку.

Acceptance criteria

  • Access протух → refresh выдаёт новый, старый refresh больше не работает.
  • logout → старые токены отклоняются (401).
  • Деактивированный юзер получает 401 на следующем же запросе, не дожидаясь истечения access.
  • Повторный показ ротированного refresh → отказ + отзыв цепочки.
  • Тесты на refresh-flow, logout, деактивацию.

Metadata

Metadata

Assignees

No one assigned

    Labels

    authАвторизация и безопасностьsecurityБезопасность, защита эндпоинтов

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions