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

刷新令牌是否需要过期的JWT来创建新的访问令牌?

弓智明
2023-03-14

在我最近的遭遇中,我试图实现在前端安全存储的JWT令牌。我以前的方法是在易受XSS攻击的sessionStorage中存储access_token以及refresh_token。现在,当access_token过期时,我将调用/refreshendpoint来获取新的

之后,我们更改实现以防止XSS和CSRF。接下来,Local存储与Cookie

建议将访问令牌存储在内存中,并将刷新令牌存储在cookie中。所以从FE,我们无法访问cookie。(HTTPOnly cookie)和access_token

现在真正的挑战是当页面刷新时,我们会丢失access_token,因为我们将它存储在内存中,并且 API 要求提供过期的 JWT 令牌。

所以我的问题是,/refreshendpoint是否需要过期的JWT令牌,或者使用没有JWT标记的刷新令牌是一种好做法。

共有1个答案

高高雅
2023-03-14

内存中的访问令牌和 Cookie 中的刷新令牌是 SPA 的一个受人尊敬的选项。有一种名为TMI BFF的新兴标准值得关注,因为它有望正式确定最佳实践。

cookie的属性应符合以下要求:

    < li >仅HTTP Only > < li >安全 < li>AES 256加密 < li>SameSite=strict

使用“身份验证 cookie”也不需要访问令牌,因为这些用例不适用于客户端:

  • 用户刷新页面
  • 用户打开新的浏览器选项卡

一种选择是发送防伪令牌和cookie,如OWASP双提交模式中所述。在浏览器中,防伪令牌需要存储在本地存储中,以便上述用例正常工作。这不是100%XSS安全的,但浏览器中的任何其他东西也不是。

我的一些代码使用这种方法作为在后端API中执行OAuth工作的一部分:

  • 水疗代码
  • API 中的 OAuth 代码

像许多人一样,我对SPA最佳实践如何发展很感兴趣。值得一提的是,有些人建议通过“后端代理前端”来代理所有API调用:

  • 它目前被认为更安全
  • 但它也增加了复杂性,并可能降低了某些领域的能力
 类似资料:
  • 这是我的身份验证流程: 用户登录后收到两个令牌(具有过期时间的访问令牌和没有过期时间的刷新令牌) 对于每个用户,刷新令牌存储在数据库中名为refreshTokens的json列中(这是一个数组) 在客户端,访问令牌和刷新令牌都存储在本地存储器上 当需要验证用户时,如果访问令牌过期,将使用刷新令牌创建一个新的访问令牌,并将其发送回用户并保持用户登录 当用户注销时,数据库中存储的刷新令牌(在refre

  • 问题内容: 在我的应用程序中,当用户成功登录时,我将返回访问令牌和刷新令牌。访问和刷新令牌的到期时间已分别设置为10分钟和40分钟。(我应该对这些值进行更多研究。这只是为了测试) 我使用了以下文章中描述的实现 http://www.svlada.com/jwt-token-authentication-with-spring- boot/ 假设我在登录10分钟后向服务器调用了一个请求。由于访问令牌

  • 在我的应用程序中,当用户成功登录时,我返回访问令牌和刷新令牌。访问令牌和刷新令牌的过期时间已分别设置为 10 分钟和 40 分钟。(我应该对这些价值观做更多的研究。这只是为了测试) 我使用了以下文章中描述的实现 http://www.svlada.com/jwt-token-authentication-with-spring-boot/ 假设我在登录10分钟后调用了对服务器的请求。由于访问令牌已

  • 登录时,将从服务器发送JWT访问令牌,并保存在RN中的AsyncStorage中。 现在,我希望用户保持登录5年,直到他们: > < li> 注销 管理员撤销了他们的令牌 他们在3台设备上登录,在其中一台设备上更改密码,这应该从其他2台设备上注销他们,直到他们在这些设备上再次登录 丢失他们的电话,并从另一个设备登录以从所有设备注销 看起来我不得不在数据库中存储JWT令牌(我知道这不是JWT令牌的重

  • 我在自己的Web API上使用Oauth2,在Web应用程序上使用ASP.NET C#来使用该API。在我的web应用程序上,我正在进行HttpWebRequests。当我的访问令牌过期时,我调用一个方法“refreshToken”,该方法发出请求以获取新的访问令牌。这工作很好,没有问题...除了我得到的响应包含一个新的刷新令牌???我在等新的访问令牌。我甚至认为在没有再次传递凭据的情况下这是不可