正如 Headers 所示,JWT令牌存储在服务器端的哪个位置?在数据库中还是在记忆中?我知道实施可能因不同的要求而有所不同,但一般情况下你会在哪里储存它?
如果我想提供一个非常基本的令牌认证服务器,这意味着在通过POST请求接收用户名和密码时,我想返回一个令牌 . 在这种情况下,使用非常基本算法生成的令牌与jwt令牌的工作方式有何不同?
使用由简单算法生成的令牌:
-
它不包含有效负载
-
其值不是根据用户名和密码计算的,因此无法将其重新定义为有意义的内容
在这种情况下,使用JWT还有 Value 吗?
谢谢!
3 回答
客户端需要存储它,不需要在服务器存储上 .
JWT本身具有所有权利要求,并且也由服务器签名 . 收到后,服务器检查签名并读取声明 . 它与存储的值不匹配 . 这就是使用JWT对抗访问令牌的重点 .
看看JWT是如何构建的 .
不需要存储Jwt令牌,但需要存储“秘密密钥” . jwt的结构是header.payload.signature,其中签名由服务器生成如下:
所以在本质上:
1.header.payload.signature在首次登录时发送给客户端
2.client返回header.payload.signature在后续的api调用3.server中对其进行解码以进行验证,如下所示:base64Header,base64Payload,signature = token.split(' . ')
您不需要在服务器端存储令牌 . 您应该在服务器上存储一个私钥(您选择的任何字符串),最好是作为环境变量.jsonwebtoken提供的方法使用此私钥生成一个令牌以传递给客户端 . 客户端必须在客户端存储此令牌,以便它可以将此令牌传递给标头中对服务器的后续请求 . 服务器将从头中提取令牌值,并通过调用jsonwebtoken的方法使用私钥对其进行验证 . 如果未通过任何方式修改令牌,则验证将成功 .