Почему Base64 используется в JWT - PullRequest
1 голос
/ 11 октября 2019

Я пытаюсь понять JSON Web Tokens и узнал, что Base64 - это кодировка, используемая в них. Поскольку base64 может быть легко декодирован, мой вопрос - зачем их использовать. Почему бы не использовать одностороннюю хеш-функцию для генерации токена?

Пожалуйста, избавьте меня, если вопрос кажется глупым

Ответы [ 2 ]

1 голос
/ 11 октября 2019

JSON Web Token (JWT) - это открытый стандарт, определяющий компактный и автономный способ безопасной передачи информации между сторонами в виде объекта JSON.

Фактически, JWT является родовым именем для следующих типов токенов:

  • JSON Web Signature (JWS): Полезная нагрузка закодирована и подписана , поэтому можно проверить целостность заявок.

  • JSON Web Encryption (JWE): Их полезная нагрузка зашифрована , поэтому заявки скрыты от других сторон.

Поскольку base64 может быть декодированлегко, мой вопрос, зачем их использовать.

Ну, возможно, это одна из причин, почему используется Base64: это очень популярный формат кодирования и очень легко использовать его в большинстве языков программирования. Кроме того, Base64 является URL-безопасным , поэтому токены можно отправлять в URL.

Почему бы не использовать однонаправленную хеш-функцию для генерациитокен?

Он отрицает цель подписанного JWT, так как получатель не сможет проанализировать содержимое токена.

1 голос
/ 11 октября 2019

Вы правы, база 64 легко декодируется, но 2 раздела (заголовок и полезная нагрузка), которые основаны на 64 кодировании, не должны быть скрыты.

Просто общее введение, токен JWT состоит из 3 разделов nl. 1. Заголовок (алгоритм) 2. Загрузка (данные пользователя) 3. Подпись

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

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

Для получения дополнительной информации вы можете проверить следующие ресурсы: https://jwt.io/ (Чтобы увидеть структуру) https://jwt.io/introduction/ (Общая информация)

...