gpt4 book ai didi

access-token - JSON Web token (JWT) 相对于数据库 session token 的优势

转载 作者:行者123 更新时间:2023-12-03 06:08:15 32 4
gpt4 key购买 nike

使用数据库 session token 系统,我可以让用户使用用户名/密码登录,服务器可以生成 token (例如 uuid)并将其存储在数据库中并将该 token 返回给客户端。其上的每个请求都将包含 token ,服务器将查找 token 是否有效以及它属于哪个用户。

使用 JWT,由于服务器上保存的 key 与客户端保留并随每个请求发送的签名 token 相结合,因此无需将任何与 session / token 相关的内容保存到数据库中。

这很好,但是除了保存数据库检查每个请求(无论如何都会很快,因为它只是检查哈希表)之外,我不清楚使用 JWT 的优点是什么。有熟悉这个的人可以解释一下吗? 让我们忽略 cookie,它具体是如上所述的数据库自定义 token 和我正在尝试比较和了解其优点的 JWT

最佳答案

主要区别在于 session 存储大小和服务器所需的查找工作:

  • 在服务器端,JWT 在内存(或配置文件)中存储一个单个 key - 称为 secret key 。该 key 有两个用途,它可以创建新的加密 token ,并且它的功能类似于“打开所有锁”的主 key ,实际上它会验证所有 token 。因此,服务器对身份验证请求的响应速度要快得多,因为无论您有两百万还是两百万用户登录,都没有关系 - 相同数量的记录(一条,该服务器 key )将用于验证所有客户端请求。

  • 传统身份验证将用户 session 存储在数据库中,为每个用户在数据库中创建一条记录,从而产生多个 key 。因此,如果有 200 万用户登录,服务器将创建 200 万条记录,并且对于每个客户端请求,服务器需要在数据库中查找相关 session 记录*。

JWT 将其留给客户端来存储和处理整个 session /用户对象。它实际上更有意义,因为每个客户端只处理自己的数据,因此它也不会给客户端带来繁重的工作。

至于您在上一段中所写的内容,我们在这里保存的不仅仅是数据库调用。 JWT 实际上更具可扩展性,因为它具有独立和轻量级的性质,它不会因为身份验证请求堆积而失败,并且允许服务器处理跨设备和服务的身份验证,而无需在服务器端管理 session .

不过,在安全方面,数据库 session 可以说占据上风:由于存在延迟,它们可以更加安全,并且在用户注销后也不易受到 session 劫持。

*数据库存储 session 方法可以通过有效的缓存以及在快速键/值服务器(例如 Redis)中仅存储 session ID(而不是整个用户对象)来进行优化。也就是说,在大多数情况下我仍然会选择 JWT 方法而不是 db。

关于access-token - JSON Web token (JWT) 相对于数据库 session token 的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26216489/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com