JWT令牌存储在服务器上的位置和其他相关问题

时间:2015-10-31 04:25:37

标签: security jwt

正如标题所示,JWT令牌存储在服务器端的哪个位置?在数据库中还是在记忆中?我知道实施可能因不同的要求而有所不同,但一般情况下你会在哪里存储它?

如果我想提供一个非常基本的令牌认证服务器,这意味着在通过POST请求接收用户名和密码时,我想返回一个令牌。在这种情况下,使用非常基本算法生成的令牌与jwt令牌的工作方式有何不同?

使用简单算法生成的令牌:

  1. 它不包含有效负载
  2. 其值不是根据用户名和密码计算出来的,因此无法将其重新转换回任何有意义的内容
  3. 在这种情况下,使用JWT还有价值吗?

    谢谢!

4 个答案:

答案 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方法使用私钥对其进行验证。如果未对令牌进行任何修改,则验证将成功。