Реализация личных токенов (ala api-key) с использованием JWT в Spring Boot - PullRequest
0 голосов
/ 11 марта 2019

В настоящее время REST API защищен с помощью токенов JWT: пользователи получают JWT из / oauth / token, предоставляя свои учетные данные, client_id и client_secret.После получения токена они используют его для авторизации запросов в REST API (роли из токена сравниваются снова с ролями, определенными в аннотации @PreAuthorize для методов отдыха).

Необходимо расширить этот подход.Нам нужно сгенерировать персональные токены с более точно определенными ролями пользователей, напр.user.read, user.modify, admin.delete, admin.modify и т. д. Они должны работать аналогично тому, как работают токены github: https://github.com/settings/tokens/new. Давайте назовем их «персональными токенами».

Идея состоит в том, что персональные токены будут также токенами JWT, поэтому токен будет содержать что-то вроде ACL: 'user.modify' и т. Д. Эти ACL будут проверяться в конечных точках Rest аналогично @PreAuthorize.аннотация

Таким образом, существует несколько проблем: 1. В настоящее время не прошедшие проверку подлинности пользователи получают свои токены из / oauth / конечной точки токена.Можно ли повторно использовать эту конечную точку для генерации токенов с прикрепленными настраиваемыми ACL?Напримерпоместить ACL в параметры запроса, а затем вызвать / oauth / token и расширить токен этими дополнительными параметрами?2. Как настроить Spring Boot для обработки двух видов JWT?Стандартный JWT и персональный JWT?Должен ли я добавить конвертер токенов, который помещает параметры ACL из токена в объект аутентификации?3. Есть ли способ сохранить такие токены и сохранить их после создания?(изменить ACL, отозвать их).Может быть, JWT - не лучший вариант, может быть, токен должен содержать только какой-то идентификатор, сгенерированный во время создания, и каждый раз, когда приходит запрос с таким токеном, я должен проверять списки ACL в базе данных и затем предоставлять некоторые привилегии?

...