Роли с использованием 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, если это необходимо.