【问题标题】:JWT token security Check with Ruby使用 Ruby 进行 JWT 令牌安全性检查
【发布时间】:2019-08-22 06:41:48
【问题描述】:

我正在使用 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 令牌,则会出错。工作正常。

但是,如果我将令牌 token1token2 粘贴到 https://jwt.io/ 上方,我就能看到有效载荷。这是安全的方式还是错误?作为参考,我附上了两个屏幕截图。

【问题讨论】:

    标签: ruby-on-rails ruby jwt


    【解决方案1】:

    JWT 不是为了加密,而是为了识别。

    JWT 生成器使用私钥对负载进行签名,您可以使用公钥验证它是否由特定生成器生成。但是payload没有加密,任何人都可以读取。

    例如。 John 向您发送一条消息“他在家。”,并用他的私钥签名。每个人都可以阅读此消息,但您可以验证它确实是由 John 发送的,而不是像 Alice 这样的其他人。

    【讨论】:

    • 哦,我明白了。感谢清除我的疑问。它不用于加密,而是用于身份验证。
    【解决方案2】:

    任何人都可以解码,但只有知道你秘密的人才能验证令牌。

    了解使用 JWT 的目的不是以任何方式隐藏或模糊数据,这一点很重要。使用 JWT 的原因是为了证明发送的数据实际上是由真实来源创建的。

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

    【讨论】:

      猜你喜欢
      • 2016-07-20
      • 2018-11-12
      • 2020-07-18
      • 2019-02-05
      • 2017-05-19
      • 2018-10-16
      • 2017-12-25
      • 2020-04-15
      • 2022-01-19
      相关资源
      最近更新 更多