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