Должен ли веб-токен jwt быть зашифрован?

Я читал статью о веб-токене JWT как токене доступа, который является ответом для пользователя. В некоторых из них упоминается, что веб-токен должен быть в состоянии декодироваться пользователем.

Означает ли это, что не стоит дешифровать весь веб-токен? Например, я предполагаю вернуть следующий веб-токен JWT пользователю, где эта часть информации может быть декодирована.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

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

Итак, я расшифрую этот новый текст, когда получу этот токен доступа на сервере и расшифрую его.

Рекомендуется ли делать это таким образом, если я не хочу показывать пользователю некоторые значения, указанные в претензии (например, идентификатор пользователя)? Если нет, каковы альтернативы?

5 ответов

JWT ( RFC7519) - это просто компактный способ безопасной передачи претензий от эмитента аудитории через HTTP.

JWT может быть:

Имеет смысл шифровать JWS, если вы хотите сохранить конфиденциальную информацию скрытой от носителя (клиента) или третьих лиц.

Реальные вопросы: аудитория поддерживает JWE? Если да, то какие алгоритмы поддерживаются?

JWT "подписаны", и поэтому его содержимое защищено от подделки: вы не можете изменить его содержимое, не сделав их недействительными.

При желании вы можете "зашифровать" содержимое и, следовательно, сделать его видимым только для эмитента (объекта, создающего токен) и потребителя (объекта, которому предназначено использовать его содержимое после проверки).

Для этого есть стандарт: JWE

Токен содержит пользовательские данные и действует как временное хранилище. Хранить конфиденциальные данные в токене не рекомендуется.

На первом уровне вы должны сохранить имя пользователя и, возможно, роль или что-то в этом роде. Вы не должны включать пароли, поэтому их не нужно шифровать. Тем не менее, вы можете зашифровать его, если хотите.

Да, лучше всего использовать JSON Web Encryption (JWE) RFC , утверждения в JWT после его декодирования представляют собой обычный текст, поэтому, если пользователь потерял токен, конфиденциальная информация, такая как электронная почта, имя пользователя, права доступа, может быть видна. и может использоваться в качестве исходной информации для любой атаки.

Лучшие текущие практики JSON Web Token , RFC 8725 описывает, как правильно спроектировать реализацию JWT с нуля, но нет рекомендаций от авторитетного органа, такого как IEEE, W3C или IETF, относительно того, следует ли шифровать полезную нагрузку JWT.

Примечание. Если вы следуете веб-рекомендациям Google и Bing , вы отвечаете через безопасный транспорт, например HTTPS.

С точки зрения закрепления информации с сохранением состояния, такой как токен доступа к протоколу HTTP без отслеживания состояния, см. файлы cookie: Ограничить доступ к файлам cookie .

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

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