【发布时间】:2018-03-06 04:45:24
【问题描述】:
在 RSA256 算法中编码和解码令牌时,我们似乎总是初始化和使用相同的私钥:
payload = {:data => 'test'}
rsa_private = OpenSSL::PKey::RSA.generate 2048
rsa_public = rsa_private.public_key
token = JWT.encode payload, rsa_private, 'RS256'
# eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ0ZXN0IjoiZGF0YSJ9.c2FynXNyi6_PeKxrDGxfS3OLwQ8lTDbWBWdq7oMviCy2ZfFpzvW2E_odCWJrbLof-eplHCsKzW7MGAntHMALXgclm_Cs9i2Exi6BZHzpr9suYkrhIjwqV1tCgMBCQpdeMwIq6SyKVjgH3L51ivIt0-GDDPDH1Rcut3jRQzp3Q35bg3tcI2iVg7t3Msvl9QrxXAdYNFiS5KXH22aJZ8X_O2HgqVYBXfSB1ygTYUmKTIIyLbntPQ7R22rFko1knGWOgQCoYXwbtpuKRZVFrxX958L2gUWgb4jEQNf3fhOtkBm1mJpj-7BGst00o8g_3P2zHy-3aKgpPo1XlKQGjRrrxA
puts token
decoded_token = JWT.decode token, rsa_public, true, { :algorithm => 'RS256' }
# Array
# [
# {"data"=>"test"}, # payload
# {"alg"=>"RS256"} # header
# ]
puts decoded_token
但是在 Rails 5.1 应用程序中最好的方法是什么?
【问题讨论】:
-
您的意思是,您想在每次使用时生成不同的密钥?
-
@ben,不,相反。我以前使用过 HMAC,可以只使用 Rails 生成的密钥。使用 RSA256 就不同了。我总是必须使用相同的私钥来编码和解码令牌。这就是为什么我要问并想知道在 Rails 中使用它是否有一些提示和技巧,因为我没有提供私钥并且必须自己创建它:
OpenSSL::PKey::RSA.generate 2048 -
否则,如果你创建一个新的 rsa 私钥并尝试解码之前生成的 rsa 密钥创建的令牌,你会得到
JWT::VerificationError: Signature verification raised -
我知道。我还是不明白你的意思对不起
-
为什么不把 KEY=OpenSSL::PKey::RSA.generate(2048) 放在初始化器中?
标签: ruby-on-rails jwt