首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我要将用于JWT的刷新令牌存储在服务器数据库中?存储访问令牌会更好吗?

为什么我要将用于JWT的刷新令牌存储在服务器数据库中?存储访问令牌会更好吗?
EN

Stack Overflow用户
提问于 2021-09-23 15:26:33
回答 1查看 2.7K关注 0票数 0

我目前正在构建一个Node.js应用程序,并试图使用JWT来处理会话。在我看到的每个实现中,refresh-token都存储在像redis这样的快速数据库中。当令牌过期时,客户端发送refresh-token以获得新的access-token,然后服务器检查refresh-token是否在数据库中,然后生成一个新的令牌。

但是由于refresh-token必须由服务器生成,不能被篡改,而且我们也可以检查它是否过期,为什么我们需要存储它。如果是针对logout的,那么我们就不能将user_id存储在数据库中,供登录的用户使用,而不需要存储refresh-token

我还考虑将最新的access-token (而不是refresh-token )存储在redis中,作为user_id的值。原因是,只有当上一个access-token过期时,我们才会生成一个新的。所以下面的情况不会发生,

在前一个令牌仍然有效的情况下,refresh-token.

  • Immediately和
  1. 用户登录、获取access-tokenaccess-token刷新他们的令牌。
  2. 注销,并使用他们的旧访问令牌.

由于大多数实现黑名单中只有客户端在注销期间提供的access-token,我相信如果客户端使用REST,这个场景是可能的。

那么,存储refresh-token的用途是什么,而存储access-token在任何方面都是有益的。有关申请的更多信息,

https

  1. I使用redis登录用户,并使用黑名单中的access-token (在注销期间提供)。
  2. I将refreshaccess令牌存储在httpOnly cookies中,并将access令牌作为承载
  3. 发送到POST正文中,同时刷新访问令牌。H 239H 140我不使用https
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-26 07:05:11

让我回答你们的每一个问题:

  • “但是由于refresh-token必须由服务器生成,所以不能被篡改,我们也可以检查它是否过期,为什么我们需要存储它”:

刷新令牌意味着过期时间非常长(可能是数月),因此用户不必频繁地登录应用程序(特别是在移动应用程序的情况下)。因此,如果恶意用户窃取用户的刷新令牌,则用户的受保护信息将被公开很长时间。如果发生这种情况,相当安全的应用程序应该有一些机制,例如,检测用户IP地址的突然变化并报告它们。现在,如果用户确认他的帐户中存在奇怪的行为,那么有必要撤销他的所有刷新令牌以保护他的信息,要做到这一点,就必须控制某个用户拥有的刷新令牌,因此必须存储它们。

如果是针对refresh-token__":的

  • ,那么我们就不能将user_id存储在数据库中,供登录的人使用,而不需要存储logout

您需要同时存储"user_id“和”刷新令牌“,这样就可以控制某个"user_id”的所有刷新令牌(如前所述)。如果您只想存储已登录用户的"user_id“(不存储刷新令牌),我不知道如何检查用户是否有权更新访问令牌,而不必让用户登录。

  • “我也是这样想的:存储最新的access-token而不是access-token,您正在失去JWT (https://restfulapi.net/statelessness)提供的”无状态“方法的优势,因为您正在存储它们的状态。如果您真的想要这样的东西,最好使用像会话这样的“有状态”方法。
  • --我不知道为什么要这样做。假设您有一个web应用程序和一个连接到RESTful API的移动应用程序,如果用户登录到这两个应用程序中,他将拥有多个有效的访问令牌和刷新令牌,那么用户同时拥有多个有效令牌是完全正常的。
  • 如果用户注销,只需从他的设备中删除访问令牌和刷新令牌,另外,从数据库中删除刷新令牌。在访问令牌上使用较短的过期时间(15分钟是非常常见的),因此您不需要存储它们,因为它们将很快过期。就是这样,
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69302873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档