当前位置: 首页 > 知识库问答 >
问题:

使用访问令牌和刷新令牌的JWT身份验证流

易嘉胜
2023-03-14

我正在做一个项目(没有生产级别,只是为了提高我的技能),我正在使用JWT来处理身份验证。从我所读到的内容来看,仅使用JWT作为访问令牌是非常不安全的,因此我们需要刷新令牌。因此,在登录时,服务器返回一个访问令牌和一个刷新令牌(我将存储在httpOnly cookie中)。访问令牌在短时间内到期,但刷新令牌在到期时用于获取新令牌。

我的问题是,我们何时使用刷新令牌来获取新的访问令牌?是当用户想要获得受保护的资源,并且发现访问令牌已经过期(而刷新令牌还没有过期)时,还是每次用户想要获得受保护的资源时,我们都要发送一个新的访问令牌?我对刷新令牌何时何地发挥作用感到困惑。

(我在前端使用 React,在服务器上使用 Nodejs)

共有2个答案

谯振国
2023-03-14

刷新令牌可以在任何时候用于请求新的访问令牌。在请求之前检查访问令牌的有效性是实现这一点的一种方法。另一种常见的做法是,如果访问令牌在当前令牌到期的特定时间范围内,则刷新访问令牌。一个简单的cronjob可以在这种情况下工作。如果您假设访问令牌没有在多个地方使用(这是不应该的),那么当创建新的访问令牌时,当前的访问令牌可能会失效。此外,为了获得最大的安全性,应该用访问令牌替换刷新令牌。这限制了长期刷新令牌被破坏的安全风险。

司徒良哲
2023-03-14

您使用了一些安全令牌,这意味着您的系统有一些受保护的资源。只有在成功验证令牌后,才能访问这些资源。由于您正在使用JWT令牌(通常用于无状态身份验证),并且您的系统同时向客户端授予access_Tokenrefresh_Token,因此在服务器端,您可以使用一些身份验证拦截器来验证每个私有请求中的access_tken,并在令牌过期时返回一些错误代码。在客户端,您还可以使用一些过滤器,它应该捕获错误代码,并通过使用可用的refresh_token从服务器请求新的access_token。在refresh_token过期的情况下,您的系统应遵循新身份验证的路线。

 类似资料:
  • 我试图弄清楚我应该如何坚持身份验证。 假设用户使用电子邮件和密码成功进行身份验证。然后服务器生成并返回两个令牌: accesstoken(jwt过期15分钟)将存储在浏览器存储中 refreshtoken(jwt过期7天)作为安全cookie 当将访问令牌存储在本地存储(或会话存储)中时,React 应用程序将简单地检查它是否存在于存储中并继续渲染私有路由。因此,这意味着如果用户有一个无效/被盗的

  • 这是我的身份验证流程: 用户登录后收到两个令牌(具有过期时间的访问令牌和没有过期时间的刷新令牌) 对于每个用户,刷新令牌存储在数据库中名为refreshTokens的json列中(这是一个数组) 在客户端,访问令牌和刷新令牌都存储在本地存储器上 当需要验证用户时,如果访问令牌过期,将使用刷新令牌创建一个新的访问令牌,并将其发送回用户并保持用户登录 当用户注销时,数据库中存储的刷新令牌(在refre

  • 我引用的是另一篇讨论在JWT中使用刷新令牌的SO帖子。 JWT(JSON Web令牌)自动延长到期时间 我有一个应用程序,它具有一个非常通用的体系结构,在这个体系结构中,我的客户机(web和移动)与一个REST API对话,然后再与一个服务层和数据层对话。 令牌每小时由客户端刷新一次。 如果用户令牌未被刷新(用户处于非活动状态且应用程序未打开)并且过期,则无论何时他们想要恢复,都需要登录。 我看到

  • 我已经阅读了JWT和访问令牌和刷新令牌。我知道您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。 我不清楚三件事: 谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期?(显然刷新令牌也需要过期,尽管需要更长的时间才能过期)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。在某些情况下(移动应用)

  • 我正在构建一个使用JWT进行身份验证的应用程序。我开始做一些研究,但对于诸如刷新令牌和令牌存储之类的主题缺乏共识,我感到惊讶。 据我所知,JWT和OAuth是两个不同的协议,它们遵循不同的规范。 但我的问题是,对于一个没有通过第三方资源服务器如Google、Facebook等认证的应用程序,有一个刷新令牌真的有用吗?为什么不让JWT令牌像刷新令牌一样持续时间长。 另一方面,我可以看到,如本文所述,

  • null 很抱歉太啰嗦了。 提前谢了。