【发布时间】:2021-06-02 20:05:45
【问题描述】:
我只是在一个 rails 应用程序上尝试 JWT 令牌,使用这个 jwt 库: https://github.com/jwt/ruby-jwt
JWT.encode({sss: "333"}, 'SECRET_KEY')
返回以下令牌:
eyJhbGciOiJIUzI1NiJ9.eyJzc3MiOiIzMzMifQ.CwX_1FztYHVpyx_G27u938SceilsVc5AB5Akwqlo2HA
然后我使用上面的令牌解码
JWT.decode("eyJhbGciOiJIUzI1NiJ9.eyJzc3MiOiIzMzMifQ.CwX_1FztYHVpyx_G27u938SceilsVc5AB5Akwqlo2HA", 'SECRET_KEY')
正确返回以下响应:
[{"sss"=>"333"}, {"alg"=>"HS256"}]
但如果我尝试将令牌的最后一个字母更改为 B 而不是当前的 A 它仍然返回相同的响应,这很奇怪。
JWT.decode("eyJhbGciOiJIUzI1NiJ9.eyJzc3MiOiIzMzMifQ.CwX_1FztYHVpyx_G27u938SceilsVc5AB5Akwqlo2HB", 'SECRET_KEY')
即使我提供的令牌错误,也得到此响应:
[{"sss"=>"333"}, {"alg"=>"HS256"}]
实际上,直到“D”的所有字符我都得到相同的响应
如果我使用F 和上面的其他人,那么它会按预期显示错误:
JWT.decode("eyJhbGciOiJIUzI1NiJ9.eyJzc3MiOiIzMzMifQ.CwX_1FztYHVpyx_G27u938SceilsVc5AB5Akwqlo2HF", 'SECRET_KEY')
JWT::VerificationError(引发签名验证) 来自 (irb):34
这可能是什么原因?这是预期的行为还是我在这里做错了什么?
【问题讨论】:
标签: ruby-on-rails jwt base64 digital-signature