jwt.io 表示即使未提供密钥也已验证签名

jwt.io says Signature Verified even when key is not provided

我用下面的代码片段在 nodejs 中签署了一个 jwt。

var jwtoken = jwt.sign({ email: 'test@test.com', name: 'test' }, 'abcd');

我在签名后得到了以下令牌

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InRlc3RAdGVzdC5jb20iLCJuYW1lIjoidGVzdCIsImlhdCI6MTYzNjE4MjYwOX0.07FXjm1lKEIiU_QOMEEOFzhsC0vtKt4PFoW-7YHHzyM

我想在 jwt.io 中粘贴 JWT 时用 jwt.io 验证这一点提供 abcd 这是我的实际密钥)。我期望需要密钥来确定签名是否有效。 jwt.io 如何在没有原始密钥的情况下确定 jwt 是否有效。

https://jwt.io 调试器双向工作,您可以检查和验证令牌或创建和签署令牌。当您将您的令牌粘贴到左侧,然后然后将秘密或密钥粘贴到右栏'verify signature'下的字段中,将重新创建签名,您应该注意到它已更改。在这种情况下,结果总是 'signature verified',因为签名只是根据输入的秘密计算的。

验证签名的正确方法是将密钥粘贴到密钥字段中,然后然后 将令牌粘贴到调试器的左侧部分。始终确保输入字段中的任何其他内容都被覆盖。如果您的密钥实际上是 Base64 编码的(即以 Base64 编码形式存储的二进制秘密),您应该通过选中“秘密 base64 编码”复选框来告诉 jwt.io。

那么结果,无论是'signature'已验证'还是'invalid signature',都是正确的。

此后您输入的每个密码都会导致重新计算签名,然后始终会对其进行验证(使用新密码)。同时单击“secret bas64 encoded”复选框会导致重新计算。

但如果您按正确的顺序执行,错误的秘密会导致“无效签名”结果: