Роли с использованием JWT
Я новичок в JWT. Я немного изучил JWT и понял, что он создан как "header.claims.signature".
Рассмотрим простой сценарий следующим образом:
- Клиент получает аутентификацию
- Клиент может иметь (одну или несколько) роли администратора, участника, зарегистрированного, гостя
- Сервер не поддерживает сеанс (и зависит только от JWT для аутентификации/авторизации)
После аутентификации сервер находит тип клиента, и я предполагаю, что customerId и роли будут частью "претензий" в JWT. Сообщите мне, если мое предположение неверно (или против стандартного).
Часть "претензий" JWT не зашифрована (просто закодирована). Это обеспечивает легкую дыру в безопасности, где потребитель (услуга) может просто модифицировать часть "претензий" JWT и повторно отправлять то же самое с большим количеством ролей (для которых клиент/потребитель не имеет права).
Если мое понимание/предположение неверно, как мы достигаем того, к чему я нацелен?
Ответы
Ответ 1
При использовании JWS (header.claims.signature) часть "претензий" JWT защищена целостностью подписи. Поэтому, если "претензии" или любая другая часть JWT изменена кем-либо без соответствующего ключа, проверка подписи на JWT не удастся, и токен должен быть отклонен.
Ответ 2
Часть "претензий" JWT может быть проверена, но другая проблема при добавлении чего-то вроде ролей в "претензию" - это случай, когда вы меняете роли пользователя, но старый токен по-прежнему содержит предыдущие роли, назначенные пользователю. Поэтому будьте осторожны.
Вы можете просто сохранить идентификатор пользователя в токене и получить любую другую информацию, связанную с пользователем, на основе вашего механизма сохранения (базы данных или что-либо еще).
Ответ 3
Другим вариантом является поиск пользователя в базе данных во время аутентификации на основе идентификатора пользователя, включенного в токен, для проверки ролей или других аспектов их личности, не включенных в JWT.
Однако любая информация, включенная в JWT, проверяется посредством сигнатуры, как указано ранее, поэтому вы также можете полагаться на то, что находится в JWT, если это необходимо.