我读到存储令牌的最安全方法实际上是使用 cookie 作为刷新令牌,在内存中(如在变量中)作为访问令牌。
虽然我知道这是安全的,但我真的不明白它在实践中是如何工作的。这是否意味着我们必须在每个请求上使用我们的刷新令牌创建一个新的访问令牌?或者有没有办法让它有效并复制到新变量直到它过期?
在内存中存储访问令牌,这不是问题吗?访问令牌将在每次刷新页面时被清除,所以每次登录时,我都需要再次调用登录端点
我已经尝试了一些方法,比如将访问令牌存储在 localStorage 中,但这似乎是一个很大的禁忌
虽然我知道这是安全的,但我真的不明白它在实践中是如何工作的。这是否意味着我们必须在每个请求上使用我们的刷新令牌创建一个新的访问令牌?
不是针对每个请求,而是针对每个整页重新加载。您可以将它存储在类似 React 上下文的东西中,它在内存中并且可以供您的整个应用程序使用。然后,您可以拥有一个核心
fetch
实现,它从上下文中读取它并将其放入标题或其他内容中。
此外,在该核心获取实现中,您将检查请求是否因访问令牌过期而出错,然后在发生这种情况时获取另一个访问令牌,将其设置回上下文,并重播请求是什么。
在内存中存储访问令牌,这不是问题吗?访问令牌将在每次刷新页面时被清除,所以每次登录时,我都需要再次调用登录端点
这是正确的,但这是设计使然。这里有多少影响首次加载时间的权衡(但我不认为它会很糟糕)。您会在组件树的某个较高位置调用它,以便尽早发生。这很正常,我见过很多。
有些人确实只是将其存储在本地存储中,但正如您所暗示的那样,存在安全权衡。