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

带有过期JWT刷新令牌的滑动窗口

益富
2023-03-14
    null

我目前拥有的是以下内容:当密码哈希和用户名在数据库中匹配时,刷新令牌endpoint生成一个JWT。每个刷新令牌都有一个存储在数据库中的jti,以及过期(仅用于DB清理)、device_id和一个revoked标志。可以使用refresh令牌命中另一个endpoint,该令牌返回一个JWT访问令牌。访问令牌的有效期为15分钟。无法吊销访问令牌。

我的问题出现在需求1上。我不希望用户在与网站交互时重新验证。这意味着我需要刷新令牌。然而,刷新令牌必须仅在例如上次用户交互+xx分钟内有效。我不能对每个请求都扩展访问令牌,因为没有办法将访问令牌列入黑名单。这将意味着泄露的访问令牌就像是一个永远的主密钥(只要您以15分钟的间隔不断地访问api)。但我也不知道请求令牌的过期时间。

第二个问题是(2)具有隐姓埋名的模式或多个设备。假设用户打开了20个私人选项卡,并在所有选项卡上使用remember me。然后我得在数据库中存储20个令牌。当然,我可以将类型“web”设置为5的限制,将“app”设置为3的限制,并从数据库中删除最旧的、最后访问的类型(因此使其无效)。但如果他在某个地方打开5个私人标签,这将使他退出“主”浏览器。它还将把电话的数量限制在2部。

  1. 如何将刷新令牌存储在数据库中,以便最终用户可以识别它们(例如Whatsapp webs“Safari started in New York last used at xxx-xxx-xxx”
  2. 如何避免DB中每个用户有数百个令牌(因为刷新令牌基本上永远不会过期,用户可以在不注销的情况下打开任意多个专用选项卡)
  3. 如何使用刷新/访问令牌模式实现滑动窗口?因此在客户端上没有无限刷新令牌,但在访问令牌过期后,只要有任何使用,也不会注销。我可以将它放在会话存储中,但它仍然会使我的数据库混乱,并向用户显示为“当前登录”(显示所有刷新令牌),因为它基本上仍然有效。

共有1个答案

潘兴朝
2023-03-14

网站上的滑动会话。这意味着如果用户在最近xx分钟内与网站进行了交互,则不得将其注销

为了解决这个问题,您可以使用刷新令牌,即当用户第一次登录时,应用程序将返回一个访问令牌(JWT格式),其过期日期设置为您想要的数量。当用户浏览应用程序时,您的后端将返回一个X-Refresh-Token标头,该标头在您的xx时间内有效(即,您需要为每个后端调用返回该标头)。

如果访问令牌过期(后端将读取所使用的访问令牌,并对过期日期令牌字段执行检查),后端将返回401未授权错误,您的客户端必须调用身份验证endpoint,提供存储的最后一个刷新令牌,以发出新的访问令牌。

在网站上记住我。选中此选项时,用户不得注销(或在很长时间后)

要解决这个问题,您只需要生成一个长期有效的访问令牌(即,将过期日期设置为所需的时间量)。

用户不得在应用程序上注销

 类似资料:
  • 我正在构建一个移动应用程序,并且正在使用JWT进行身份验证。 最好的方法似乎是将JWT访问令牌与刷新令牌配对,这样我就可以根据需要频繁地使访问令牌过期。 刷新令牌是什么样子的?是随机字符串吗?那串加密了吗?是另一个JWT吗? 刷新令牌将存储在用户模型的数据库中以便访问,对吗?在这种情况下似乎应该加密 在用户登录后,我是否会将刷新令牌发送回,然后让客户端访问单独的路由来检索访问令牌?

  • 我们决定使用OAuth2从Hazelcast共享会话切换到无状态JWT身份验证/授权,并发现了一个不适合我们下面描述的基础结构的问题。 因此,我们有多个独立的系统,可以通过直接链接访问,即mysite.com/scs1和mysite.com/scs2。 每个scs都有自己的UI和后端,但是“会话”(通过无状态JWT授权实现)必须在多个scs之间有效。 OAuth2授权服务器是一个专用服务器(UAA

  • 在我最近的遭遇中,我试图实现在前端安全存储的JWT令牌。我以前的方法是在易受XSS攻击的sessionStorage中存储以及。现在,当过期时,我将调用endpoint来获取新的 之后,我们更改实现以防止XSS和CSRF。接下来,Local存储与Cookie 建议将访问令牌存储在内存中,并将刷新令牌存储在cookie中。所以从FE,我们无法访问cookie。(HTTPOnly cookie)和 现

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

  • 我正在使用Tymon提供的包来处理从我的laravel后端到spa前端的Auth,我正在创建AuthController,这几乎是我从文档中获取的,只是稍微调整一下它以满足我的需要。从登录到注销以及令牌过期,一切正常。 问题是,我确实看到该控制器上有一个令牌刷新功能,如果我的猜测是正确的,那就是刷新客户端已经拥有的当前令牌。但是怎么做呢?如何处理前端上的刷新令牌?因为它是相当烦人的,每60分钟(默