Pull to refresh

Comments 3

Зачем копипастить на Хабр статью, опубликованную полтора года назад: https://purpleplane.ru/tpost/40kt5vzma1-kak-sozdat-chernii-spisok-dlya-tokenov-j?

Смысл JWT в том, что авторизация полностью отделена от API. API, к которому идёт обращение, получает всю информацию о правах сделавшего запрос к API клиента непосредственно из самого токена - без обращения к каким-либо сервисам. API ничего не знает о сервисе авторизации - он лишь проверяет переданный в JWT список прав. Тратя на это минимум времени и ресурсов и не обращаясь к каким-либо сторонним сервисам.

Использование "чёрного списка" требует, чтобы при каждом запросе к API этот API внутри себя обращался к сервису авторизации для проверки внесения полученного JWT в чёрный список. Это увеличивает нагрузку на сервис авторизации на несколько порядков и автоматически делает бессмысленным использование JWT - т.к. мы лишаемся того единственного, ради чего выбирают именно JWT: автономности JWT-токена.

Если мы используем чёрный список, то зачем передавать в токене информацию о пользователе и списке его прав? Ведь мы из API обращаемся к сервису авторизации для проверки токена и эта проверка может в своём ответе вернуть список прав. JWT становится не нужен - достаточно токена в виде простого ключа без какой-либо структуры.

Логика копипаста статьи в том, что на хабре ее не было, а материал для публикации кажется нам интересным.

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

Какой смысл использовать JWT в монолите? JWT нужен именно для того, чтобы полностью отделить сервис авторизации от API. Монолит же имеет прямой доступ ко всей информации, которая передаётся в JWT - через прямое обращение к методам модуля авторизации, без потери времени на сетевой запрос/ответ. Так зачем передавать эти данные в токене? Для получения такого же функционала в монолите достаточно использовать многократно более короткие токены-ключи, не имеющие внутренней структуры. А для увеличения производительности всю ту информацию, которая передаётся в JWT, хранить, например, в Redis. И вместо "чёрного списка" просто удалять ключ из Redis.

А использование JWT в монолите лишь увеличивает размер запроса - без реальной в этом необходимости.

Sign up to leave a comment.

Articles