为什么 jwt 令牌显示负载,即使我没有在 Jwt.io 中提供秘密(签名)?

Kad*_*mar 1 javascript node.js jwt

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjIsImlhdCI6MTU2ODY1NjI1OX0.E2TNtWjqyPC-4myEom6leLJgE96ZlQOq0-mcBr3p5QU

如果我们将使用 JsonWebToken 从我的代码生成的令牌放置在 Jwt.io 站点中,即使我没有提供要验证的秘密,它也会立即解码。我不知道为什么会显示。有人能解释一下原因吗?

--那么Jwt中SECRET的目的是什么?

Ian*_*Ian 8

我认为您对加密和签名有点困惑。

JSON Web 令牌未加密,它只是进行了 Base64 编码,这意味着任何人都可以轻松解码和查看。

然而,它是经过签名的,这意味着它是hash根据其中的所有信息和密钥生成的。只有拥有秘密密钥(对于对称散列)或公钥(对于非对称散列)的人才能确认令牌已被正确散列,并且只有密钥的提供者(拥有秘密令牌)才能创建有效的哈希值。

这样做的作用是让您相信令牌是由您认为创建它的人/服务创建的,从而防止假冒等,因此允许您信任令牌claims中创建的内容。如果该哈希因任何原因无效,您将立即拒绝该令牌,因为它很可能是伪造的。

请注意,正如 @FlorentMorselli 提到的,有一种称为JWE 的加密令牌。