首页 文章

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

提问于
浏览
2

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

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

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

  • 它不包含有效负载

  • 其值不是根据用户名和密码计算的,因此无法将其重新定义为有意义的内容

在这种情况下,使用JWT还有 Value 吗?

谢谢!

3 回答

  • 0

    客户端需要存储它,不需要在服务器存储上 .

    JWT本身具有所有权利要求,并且也由服务器签名 . 收到后,服务器检查签名并读取声明 . 它与存储的值不匹配 . 这就是使用JWT对抗访问令牌的重点 .

    看看JWT是如何构建的 .

  • 1

    不需要存储Jwt令牌,但需要存储“秘密密钥” . jwt的结构是header.payload.signature,其中签名由服务器生成如下:

    signature = HS256(base64Header + '.' + base64Payload, 'mysecret')
    

    所以在本质上:
    1.header.payload.signature在首次登录时发送给客户端

    2.client返回header.payload.signature在后续的api调用3.server中对其进行解码以进行验证,如下所示:base64Header,base64Payload,signature = token.split(' . ')

    header = base64Decode(base64Header)  
    payload = base64Decode(base64Payload)
    
    serverComputedSignature = HS256(base64Header + '.' + base64Payload, 
    'mysecret')
    
    if serverComputedSignature != signature:  
     print('FAILED')
    
  • 0

    您不需要在服务器端存储令牌 . 您应该在服务器上存储一个私钥(您选择的任何字符串),最好是作为环境变量.jsonwebtoken提供的方法使用此私钥生成一个令牌以传递给客户端 . 客户端必须在客户端存储此令牌,以便它可以将此令牌传递给标头中对服务器的后续请求 . 服务器将从头中提取令牌值,并通过调用jsonwebtoken的方法使用私钥对其进行验证 . 如果未通过任何方式修改令牌,则验证将成功 .

相关问题