我目前正在构建一个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.
access-token和access-token刷新他们的令牌。由于大多数实现黑名单中只有客户端在注销期间提供的access-token,我相信如果客户端使用REST,这个场景是可能的。
那么,存储refresh-token的用途是什么,而存储access-token在任何方面都是有益的。有关申请的更多信息,
https
redis登录用户,并使用黑名单中的access-token (在注销期间提供)。refresh和access令牌存储在httpOnly cookies中,并将access令牌作为承载H 239H 140我不使用https发布于 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)提供的”无状态“方法的优势,因为您正在存储它们的状态。如果您真的想要这样的东西,最好使用像会话这样的“有状态”方法。https://stackoverflow.com/questions/69302873
复制相似问题