Проверка безопасности токена JWT с помощью Ruby

#ruby-on-rails #ruby #jwt

#ruby-on-rails #ruby #jwt

Вопрос:

Я использую ruby-jwt gem для генерации токена. Я не уверен, что это безопасно или нет? Как я могу защитить свою полезную нагрузку. Я пробовал разные способы, но все еще могу взломать полезную нагрузку.

 > payload = {email: "gagangami@gmail.com", token: "xyz@123"}
# Way1
> token1 = JWT.encode(payload, Rails.application.secrets.secret_key_base, 'HS256')
#=> "eyJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6ImdhZ2FuZ2FtaUBnbWFpbC5jb20iLCJ0b2tlbiI6Inh5ekAxMjMifQ.l42W9P4lyP2XWXytu8qpasc6mAFg01Dg57Az1bfxgS8"

# Way 2
> rsa_private = OpenSSL::PKey::RSA.generate 2048
> rsa_public = rsa_private.public_key
> token2 = JWT.encode payload, rsa_private, 'RS256'
 => "eyJhbGciOiJSUzI1NiJ9.eyJlbWFpbCI6ImdhZ2FuZ2FtaUBnbWFpbC5jb20iLCJ0b2tlbiI6Inh5ekAxMjMifQ.U6DO9f9KZ_-GVhviACpXmuyc0dQUznPxZdCaaspr5JP36EweAuP8Wn_R2jvK2ahW0BR-RAh7Z9ChyIk94tDjasSbUYdoW_re299RB-ZmS0NVpCEa-g20sT-5JKCTwbD25vXYdxM4E0swQ81sKw35H5T8ZXSHsrE4bP5mA-me_Wli3hyGacb5O3esStPMdRC5r20qCoK7QW7Wl7NnZHLYjIn8k7lxsFmheNyl1l3OSLY92bxGkSyx4lom6bWqEMXSFdLWqPdKTOX9RZbNVi_6fGms79W6XXnb29htqkM1Z1h0RLXzjCODbALpa7At88xWr32IkHzwNxRJ28VAOJB3Qw"
  

Если я попытаюсь декодировать токен JWT вручную без секрета, это выдаст ошибку. работает нормально.

Но если я вставлю вышеуказанный токен token1 и token2 в https://jwt.io Я могу видеть полезную нагрузку. Это безопасный способ или ошибка? для справки я прилагаю два скриншота. введите описание изображения здесь
введите описание изображения здесь

Ответ №1:

JWT предназначен не для шифрования, а для идентификации.

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

Например. Джон отправляет вам сообщение о том, что «он дома.», и подписывает его своим закрытым ключом. Каждый может прочитать это сообщение, но вы можете убедиться, что оно действительно отправлено Джоном, а не кем-то другим, например Элис.

Комментарии:

1. о, я вижу, понял. спасибо, чтобы развеять мои сомнения. Он используется не для шифрования, а для аутентификации.

Ответ №2:

Расшифровать может любой, но проверить токен могут только те, у кого есть ваш секрет.

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

https://medium.com/vandium-software/5-easy-steps-to-understanding-json-web-tokens-jwt-1164c0adfcec