Обновление/изменение роли заявки (или любой другой претензии) в JWT
Я храню роли пользователя внутри JWT (для ограничения конечных точек API). Роли могут быть изменены администратором.
Если роль изменена. Как я должен отражать это во всех жетонах? Я подумал о нескольких решениях:
-
Если я использую токены обновления, пользователю придется подождать, пока истечет срок действия токена доступа.
-
Я мог бы вести запись об измененных идентификаторах пользователей и проверять каждый запрос, а затем возвращать новый токен, если пользователь был изменен.
Есть ли стандартный способ сделать это?
Ответы
Ответ 1
Обновить токены, похоже, не являются решением, если вы беспокоитесь об изменениях, которые вы делаете мгновенно, вы, вероятно, не хотите, чтобы пользователь некоторое время обращался к средствам модерации, если вы отменили его разрешения.
Что вы можете сделать, так это сохранить номер версии в токене jwt относительно пользователя, так же, как он делает это с помощью мангуста versionKey. Делая это, вы сможете проверить эту версию по сравнению с той, что находится в базе данных для данного пользователя. Каждый раз, когда вы меняете роли этого пользователя, вы увеличиваете эту версию, если версия jwt не соответствует, просто создайте новую с правильными ролями и версией и отправьте ее пользователю.
Я не верю, что для этого есть правильный стандарт, так как jwt неизменен по дизайну, вам придется полностью его изменить, если вам нужно "обновить" его.
Ответ 2
Тоны JWT неизменяемы, поэтому вы не можете изменять/обновлять заявки на существующий токен, поэтому вам нужно выпустить новый токен JWT.
Это приводит к самой большой проблеме с отзывом маркера JWT. Нет хороших решений. Что вы можете сделать, это
-
Удерживайте дату истечения срока действия JWT (и необязательно используйте токены обновления)
-
Используйте черный список, чтобы сохранить список отозванных токенов (конечно, таким образом, потеряв часть "без гражданства" )
-
измените секретный ключ (имейте в виду, что это отменяет ВСЕ действительные токены всех пользователей)
Наилучшее решение зависит от конкретного случая.