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

我在哪里存储刷新令牌和访问令牌,以及如何使用它?

何雅惠
2023-03-14

我无法轻松决定如何从后端接收刷新令牌和访问令牌,以及将其存储在哪里。

我理解的认证过程如下。

  1. XSS可以用cookies进行防御

我参考了许多文章,据说XSS将被cookie阻止,CSRF将被刷新令牌和访问令牌保护。

对于刷新令牌,它存储在webStorage中。

然而,为了防止XSS,在访问令牌的情况下,似乎应该使用cookie来保护它们(仅适用于Http),在刷新令牌的情况下,似乎应该将它们存储在客户端中。

如果刷新令牌是在带有httponly选项的cookie中发送的,那么它不是可以从客户端访问的吗?

总之。。。

在后端服务器中,访问令牌是否应作为cookie发送,刷新令牌是否应包含在正文中?

任何想法都将不胜感激。

共有1个答案

臧威
2023-03-14

令牌通常会在响应的主体中发回。这样,你的前端应用程序就可以轻松地读取它们,并在需要的地方存储它们。通常,将它们存储在内存中就足够了(在应用程序的变量或状态中,等等)。当用户刷新页面时,他们必须再次登录,但如果授权服务器支持“记住我”之类的功能,那么这应该不是问题。如果您使用的是符合OpenID Connect的授权服务器,那么您可以执行静默登录,因此无需将用户重定向到任何地方即可获得令牌。

如果您将令牌存储在仅限超文本传输协议的cookie中,那么您的应用将无法访问它们,因此您将无法从您的应用调用任何API。我认为这不是您想要实现的。

将令牌保存在内存中可以帮助您更安全地抵御XSS攻击,但您永远不会100%安全。看看这个演讲:https://pragmaticwebsecurity.com/talks/xssoauth.html解释的地方。事实上,确保XSS攻击不会窃取您的令牌的唯一方法是将令牌保存在后端应用程序中,而不是浏览器中。

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

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

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

  • 我正在使用Cognito用户池对系统中的用户进行身份验证。成功的身份验证将提供一个ID令牌(JWT)、一个访问令牌(JWT)和一个刷新令牌。这里的文档清楚地提到了刷新令牌可以用于刷新访问令牌,但没有提到如何使用。我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌? 我搜索了JavaScript SDK,但找不到任何方法来做同样的事情。我肯定错过了什么。 我还想通过Lam

  • 在GitHub中生成个人访问令牌后,是否有必要将其存储在机器的本地某处? 如果是,是否有任何首选的存储方式?