ASP.Net Core 中应该将身份验证令牌存储在何处

Where should one store the authentication token in ASP.Net Core

我的应用程序有一个 API 部分和一个网站部分。 在网站上,用户可以登录并从 API.

获取 JWT 不记名令牌

我现在的问题是:

Where should I store that token?

有人说用Cookie存(有人说"don't, because CSRF"),有人说用HTML5Web Storage,有人说用Session(还有人说"don't use Sessions in ASP Net Core"),我看到一篇文章,其中有人将 auth-token 存储在数据库中(??)。 那么,现在正确的地方是什么?

MVC-web application with many controllers and a lot of views

如果您必须使用令牌来验证对 MVC 应用程序的每个请求,我认为最好的选择是将其存储在会话 cookie 中,因为如果不这样做,网络浏览器将不会在每个请求中自动发送令牌这将是一个痛苦的屁股。

现在,为了保护 cookie 和请求:

  • 制作会话 cookie(无过期日期)
  • 尽可能限制 cookie 的范围(域和路径)。
  • 设置 Secure 和 HttpOnly 属性。
  • 设置 SameSite 属性。
  • 如果浏览器不支持 SameSite,请使用反 CSRF 令牌。
  • 设置限制性 X 框架选项。
  • 不要忘记在每次请求时验证服务器上的 JWT 签名。
  • 加密 JWT 令牌以防止可能导致社会工程学的信息泄露。