JWT.io 正在根据空密钥验证令牌并说签名已验证

day*_*mer 2 security jwt json-web-signature

我对此完全陌生,所以如果这完全是愚蠢的,请忍受我的问题。我正在学习如何使用https://jwt.io验证签名

以下是我在做什么

生成的公钥/私钥对

私钥

-----BEGIN EC PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,4A6A48288A531DCA

m2glcvku6rdV8z0QBsBc3Hc72vG4NN3wIPnqdC47FTA3y9WiD7Ukh4m3ZpL2mraz
7PSblIe8ob/aaG9TYViIb4QRYZFg8z3jR6WeNEhC2EbC2CwkSSH3ug8ViQ+1i8d1
kMnQDK1i/s0BZvxlhKPuSy2kOIjelWctkDHvJyvU/WQ=
-----END EC PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

公钥

ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHpqkegB/A/12vqfApHOaFXaJcHkyhNw1u9XnZe2+hiDT698U4c3iet5VyTo3D1DOe7Xi5dG07UorsMvWCmSbvU= 
Run Code Online (Sandbox Code Playgroud)

我使用这个网站生成ECDSA-256密钥对,密码为H2

创建 JSON 网络令牌 (JWT)

我使用http://jwtbuilder.jamiekurtz.com/生成令牌

我使用私钥对JWT. 以下是令牌

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJIYXJpdCIsImlhdCI6MTU4Nzc1MjM3NCwiZXhwIjoxNjE5Mjg4Mzc0LCJhdWQiOiJodHRwczovL3d3dy5oYXJpdC5kZXYiLCJzdWIiOiJjb250YWN0QGhhcml0LmNvbSIsIkdpdmVuTmFtZSI6Ikhhcml0IiwiU3VybmFtZSI6IkhpbWFuc2h1In0.pmvGfBXH4603YMGYDB6qOXlQjhfdPulvbODrK70ihS0
Run Code Online (Sandbox Code Playgroud)

核实

我去网站https://jwt.io下面是我尝试过的视频

JWT 问题

当秘密为空时,JWT 如何验证并将其作为有效签名。我什至还没有提供秘密。

我错过了什么?

jps*_*jps 6

当您在左侧粘贴令牌,然后在右列的输入字段中更改密钥或密钥时,将计算新签名,然后自动验证。并且秘密也可以是空的,不可取但可能。

请观察左栏中令牌的签名部分会发生什么。你会发现它变了!

这通常会导致误解,人们在这里问为什么他们的令牌通过给定的秘密进行验证,但他们的 API 说它无效。但是他们并没有注意到,在输入秘密的时候,签名是重新计算的。

如果您想检查是否可以使用给定的密码验证令牌,您始终需要先将密码粘贴到右列(在 VERIFY SIGNATURE 下)的输入字段中,然后将令牌粘贴到左列。