JWT для платного контента: как устроена проверка доступа и где она ломается
Токен доступа — компактный способ не ходить в базу на каждый запрос. Сервер выдаёт подписанный токен с информацией о подписке, клиент прикладывает его к запросам, сервер проверяет подпись и срок.
Минимальный набор полей в токене для подписки:
sub — идентификатор пользователя
plan — тариф
exp — срок действия токена
sub_until — дата окончания оплаченного периода
Где обычно ломается:
— Токен живёт долго, подписка отменена, а доступ остаётся до истечения токена. Решение: короткий срок токена (минуты-часы) плюс токен обновления, при выдаче которого проверяется реальное состояние подписки.
— Секрет подписи лежит в репозитории. Кто угодно с доступом к коду может выписать себе токен навсегда.
— Проверяется только наличие токена, но не поле plan. Подписчик базового тарифа открывает премиум-разделы.
Правило: токен решает вопрос «кто это», а вопрос «что ему можно» решается сверкой с базой хотя бы раз в несколько минут.
Пейволы и Подписки
@paywall_setup
JWT для платного контента: как устроена проверка доступа и где она ломается
Этот пост опубликован в Telegram-канале Пейволы и Подписки. Подписаться можно по ссылке: @paywall_setup.