Я предлагаю альтернативную структуру единого токена:
{
"sub": "#UserId",
"next_exp": "# Время истечения access-части (короткий срок, ~15 мин)",
"last_exp": "# Время истечения refresh-части (долгий срок)"
}
Суть идеи:
При истечении next_exp система проверяет токен в БД и обновляет его (как refresh-токен в классической схеме).
При истечении last_exp пользователь проходит авторизацию заново.
Вопросы:
Почему эта схема не используется, хотя она выглядит проще раздельных access/refresh-токенов?
Стандартный аргумент — «кража только access-токена менее опасна». Но если злоумышленник может перехватить access, почему он не сможет перехватить и refresh? Разделение действительно повышает безопасность?
Есть ли другие недостатки у объединенного подхода, кроме риска компрометации?