Роли с использованием JWT

Я новичок в JWT. Я немного изучил JWT и понял, что он обозначен как "header.claims.signature".

Рассмотрим простой сценарий следующим образом:

  • Клиент проходит проверку подлинности
  • Клиент может иметь (одну или несколько) ролей администратора, участника, зарегистрированного, гостя
  • Сервер не поддерживает ни одного сеанса (и зависит только от JWT для аутентификации / авторизации)

После проверки подлинности сервер находит тип клиента, и я предполагаю, что customerId и роли будут частью "утверждений" в JWT. Дайте мне знать, если мое предположение неверно (или не соответствует стандарту).

Часть "требований" JWT не зашифрована (просто закодирована). Это открывает легкую дыру в безопасности, когда потребитель (службы) может просто изменить часть "утверждений" JWT и повторно отправить ее с большим количеством ролей (для которых клиент / потребитель не авторизован).

Если мое понимание / предположение неверно, как нам достичь того, на что я нацеливаюсь?

3 ответа

Решение

При использовании JWS (header.claims.signature) часть "требований" JWT защищена подписью целостностью. Таким образом, если "претензии" или любая другая часть JWT изменены кем-то без надлежащего ключа, проверка подписи на JWT не удастся, и токен должен быть отклонен.

claims часть JWT может быть проверена, но другая проблема при добавлении чего-то вроде ролей в claims Это тот случай, когда вы меняете пользовательские роли, но старый токен все еще содержит предыдущие роли, назначенные пользователю. Так что будьте осторожны с этим. Вы можете просто сохранить идентификатор пользователя в токене и получать любую другую информацию, связанную с пользователем, на основе вашего механизма персистентности (базы данных или что-либо еще).

Другим вариантом является поиск пользователя в базе данных во время аутентификации на основе идентификатора пользователя, включенного в токен, для проверки ролей или других аспектов их идентичности, не включенных в JWT.

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

Другие вопросы по тегам