【问题标题】:Where should one store the authentication token in ASP.Net Core应该将身份验证令牌存储在 ASP.Net Core 的什么位置
【发布时间】:2017-10-30 18:00:09
【问题描述】:

我的应用程序有一个 API 部分和一个网站部分。 在网站上,用户可以登录并从 API 获取 JWT 不记名令牌。

我现在的问题是:

我应该在哪里存储该令牌?

有人说,将其存储在 Cookie 中(而其他人说“不要,因为 CSRF”),有人说 HTML5 Web Storage,其他人说使用 Session(而其他人说,“不要在 ASP Net Core 中使用 Sessions” ) 我看到一篇文章,其中有人将 auth-token 存储在数据库中 (??)。 那么,现在正确的位置是什么?

【问题讨论】:

  • 您能详细介绍一下您的申请吗?是SPA吗?
  • @poke 在我的例子中,它是一个 MVC-web 应用程序,很多控制器,很多视图

标签: c# asp.net-mvc authentication asp.net-core bearer-token


【解决方案1】:

具有许多控制器和许多视图的 MVC-web 应用程序

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

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

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

【讨论】:

  • 提示列表很有用,我认为这是我搜索的内容,以使我的应用程序保护程序免受攻击。所以你提到的anti-CSRF token 是臭名昭著的'anti-forgery-token'(现在,一切都开始对我有意义了:D)?那么在我使用防伪令牌时,将令牌存储在 cookie 中可以吗?
  • 只要不搞砸防伪令牌即可;是的。
  • @jlvaquero 如果我想让我的前端(空的 asp.net 核心 web 项目 + vue.js 与 web api 后端对话)在不同的主机上怎么办?
  • @lexeme 如果配置正确,带有 JWT 的 cookie 将被发送到任何子域。如果您使用的是完全不同的域,CORS 允许您有权从不同来源的服务器访问选定的资源。
  • @jlvaquero 在我的情况下应该使用 CSRF 保护令牌吗?如果它应该那么如何做到这一点?
猜你喜欢
  • 2021-01-08
  • 2021-09-22
  • 2014-04-05
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2013-10-12
  • 2021-08-30
相关资源
最近更新 更多