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

刷新令牌和JWT令牌交互

孟成化
2023-03-14

我正在构建一个使用JWT进行身份验证的应用程序。我开始做一些研究,但对于诸如刷新令牌和令牌存储之类的主题缺乏共识,我感到惊讶。

据我所知,JWT和OAuth是两个不同的协议,它们遵循不同的规范。

但我的问题是,对于一个没有通过第三方资源服务器如Google、Facebook等认证的应用程序,有一个刷新令牌真的有用吗?为什么不让JWT令牌像刷新令牌一样持续时间长。

另一方面,我可以看到,如本文所述,当刷新令牌与JWT令牌一起使用时,刷新令牌通常会受到严格的存储要求的约束,以确保它们不会泄露。但是,我无法找到在用户端存储该令牌的内容/位置以及如何存储该令牌以满足这些strick存储需求。

有人能告诉我这一切吗?谢了。

注意:我想强调的是,我的web应用程序不是使用第三方应用程序进行身份验证(Facebook,Google等),它是单页应用程序在前端端和服务器端的一个单一API发出一个JWT令牌。我的问题集中在这种建筑上

共有1个答案

刘德义
2023-03-14

简而言之,您是对的,如果您以相同的方式存储刷新和访问令牌,并且您的应用程序本身是身份提供者,那么使用刷新令牌没有太大意义--它可能与实际访问令牌相同地被窃取。

但是,考虑两件事。

第一,访问令牌随每个请求一起发送。如果您查看最近(和以前)的https漏洞,外部攻击者有时可能会提取https流的部分(在某些情况下,取决于特定的漏洞)。这通常并不简单,而且可能不可能在每一个请求中都这样做。如果您有一个生存期较短的访问令牌和一个很少使用的生存期较长的刷新令牌,即使访问令牌通过这种SSL/TLS攻击受到损害,刷新令牌也可能不是。这是一个非常轻微的好处,但仍然。

此外,您还可以以不同的方式存储刷新令牌。这些令牌的主要风险之一是XSS。如果您以在httpOnly cookie中发出刷新令牌的方式实现标识提供程序,那么Javascript就不能访问刷新令牌,因此不能使用XSS读取它。您仍然可以将访问令牌存储在Javascript对象或localStorage或其他任何东西中,如果它被破坏,它至少是短暂的。这很好,因为XSS通常需要用户交互,所以如果它工作过一次,例如用户单击了一个链接或访问了一个特定的页面,就不能保证他会再次这样做,所以攻击者可能很难读取下一个访问令牌。再说一遍,这不是一个巨大的好处,但这是一个优势。

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

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

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

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

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

  • 我正在努力围绕JWT身份验证进行思考。我读了很多文章和SO问题,但是其中一些已经过时了,我仍然没有得到满意的答案。 我读过这个SO问题,从JoséF.Romaniello的回答中我明白: 使用刷新令牌,客户端在旧的访问令牌过期之前请求新的访问令牌(这是正常的,预期行为) 在移动应用上,代币永不过期 同样在 auth0 上它说: 您可以请求新的访问令牌,直到刷新令牌在DenyList上。应用程序必须