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

SPA中刷新JWT的最佳实践?

沙海
2023-03-14

嗨,我正在开发一个与Express API通信的React应用程序。我试图实现JWT认证,但我不知道当jwt到期时会发生什么。如果用户在令牌过期时被注销,这似乎不是很用户友好。

我应该使用刷新令牌吗?正如node-jsonwebTokens包留档中所说。这可能不是最好的方法。

我应该在对服务器的每个请求中创建一个新的jwt吗?如果用户长时间阅读一篇文章而不做任何请求,他将被注销。

也许我错了,最好的做法是使用一个大的过期时间,让用户注销。如果是这种情况,什么是合理的时间?

谢谢!

共有1个答案

商昆琦
2023-03-14

通常与刷新令牌一起使用的模式是遵循以下工作流:

  1. 某些API调用/资源返回401,警告令牌已过期,这有时会伴随一个原因,例如过期令牌、无效令牌
  2. 创建对失败的API调用的引用,稍后重试
  3. 尝试使用refresh_token刷新令牌
  4. 如果刷新有效,请继续并再次执行排队的API调用
  5. 如果刷新失败,用户需要重新登录

如果在进行刷新时多个调用失败,您还可以使用上述方法对多个失败的请求进行排队。

再加上相当长的到期时间,这实际上取决于您的应用程序,这在过去对我来说已经被证明是一个健壮的解决方案。

另一种方法是实现“心跳”API调用,在用户在网站上时定期更新用户的令牌,但这可能会带来可能不希望看到的副作用。

 类似资料:
  • > 如果刷新令牌过期,这意味着用户将定期注销,这从业务角度来看是非常不希望的,这可能会损害用户的保留。是否有一种方法可以在不削弱安全性的情况下避免这种情况,例如使刷新令牌成为“永恒的”? 存储和清理刷新令牌表以防止未使用的令牌积累的最佳方式是什么?假设我有以下表结构:、、。如果策略是永远不会使刷新令牌过期,则使它们无效的唯一方法是当用户注销时。但是,用户也可以删除应用程序,丢失或损坏设备,或者因为

  • 问题内容: 当使用Angular,Ember,React等框架构建SPA风格的应用程序时,人们认为什么是身份验证和会话管理的最佳实践?我可以考虑考虑解决该问题的几种方法。 假定API和UI具有相同的原始域,则对待它与使用常规Web应用程序进行身份验证没有区别。 这可能涉及到具有会话cookie,服务器端会话存储以及可能经过身份验证的Web UI可以访问以获取当前用户信息以帮助进行个性化甚至可能确定

  • 问题内容: 有谁对jQuery Ajax刷新DIV的最佳选择有好的建议? 以下是我要实现的目标: 强调性能的优化。 就像Google + / Facebook一样,左侧将显示导航,右侧将显示内容窗格(DIV)。 当用户单击每个导航时,内容窗格将相应刷新,而不刷新整个页面。 问题答案: 在服务器上使用不同的方法来生成内容的每个部分。这样,您可以简单地调用该方法以获取特定的内容,而不是调用通用方法并仅

  • 我正在AngularJS SPA中使用资源所有者密码凭证OAuth 2.0流。有几篇文章(这里,这里…)这个问题的答案解释了我们不应该将刷新令牌存储在(web)客户端(LocalStorage)上,而是将它们加密存储在HttpOnly Cookie中,并使用代理API实现对refreh令牌的解密,从而将其转发给安全令牌服务。 大多数文章都暗示我们应该使用一种常见的保护机制来关注CSRF。我想知道单

  • 这可能涉及到会话cookie、服务器端会话存储以及一些会话APIendpoint,通过身份验证的web UI可以访问这些endpoint来获取当前用户信息,以帮助个性化或甚至确定客户端的角色/能力。服务器仍将强制执行保护对数据访问的规则当然,UI将仅仅使用这些信息来定制体验。 将其视为使用公共API的任何第三方客户端,并使用类似于OAuth的某种令牌系统进行身份验证。客户端UI将使用此令牌机制来验

  • 我想用Spring Boot和JWT开始一个项目。我看到了一些将刷新令牌保存在数据库中的示例。我是否必须将刷新令牌插入数据库,或者我是否有其他最佳实践方法? 如果我必须插入数据库,以删除过期的令牌,我应该在Spring中创建一个作业吗?