如何以及在何处安全地存储访问令牌

How and where to store access token securely

本文关键字:存储 访问令牌 安全 在何处      更新时间:2023-09-26

我知道这个问题已经被问了很多次,但坦率地说,我没有看到一个满足我标准的答案。

所以我有一个 ASP.NET WEB API,它在提供用户/通行证时发出访问令牌 (JWT)。目前,请求来自 SPA 应用程序。我遇到的问题是存储访问令牌,以便可以从 JavaScript 将其重新发送到 API。到目前为止,看起来有 2 个常用建议的选项

  • HTML5 网上商店
  • 饼干

但是这些实际上都不是安全的,因为它们不受XSS和CSRF的保护。最重要的是,它使令牌易于访问。

您有什么建议吗?

网上应用店容易受到 XSS 的攻击。Cookie 如果不是 HTTPONLY,则容易受到 XSS 的攻击。当 Cookie 不严格时容易受到 CSRF 的攻击,即使它是 HTTPONLY。

所以我认为我们可以将访问令牌存储在内存中。问题是页面刷新之间没有持久性。因此,为了持久性,我们可以在 Web 存储或 cookie 中存储刷新令牌,每当我们没有访问令牌时,我们可以使用刷新令牌静默地获取一个新令牌。

使用身份服务器时,刷新令牌对任何未经授权的客户端都没有用处。

因此,如果他们使用 XSS 并使用刷新令牌 cookie 窃取刷新令牌或 CSRF,则他们无法模拟用户或获取访问令牌。