NodeJS:在客户端存储JWT的地方? sessionStorage,localStorage还是cookies?

使用NodeJS和(例如)AngularJS在SPA上存储用于身份validation的JSON Web令牌的最佳位置是什么?

我到目前为止:

可能的地方:

  • HTML5 Web存储(localStorage / sessionStorage)
  • cookies

Web存储(localStorage / sessionStorage)可以通过JavaScript访问同一个域。 这意味着您网站上运行的任何JavaScript都将有权访问Web存储,因此可能容易受到跨站点脚本(XSS)攻击的影响。

localStorage具有不同的到期时间, sessionStorage只能在创build它的窗口打开时访问。 localStorage会一直持续到您删除它或用户删除它。

Cookie与HttpOnly Cookie标志一起使用时,不能通过JavaScript访问,并且对XSS不起作用。 但是,Cookie容易受到跨站请求伪造(CSRF)的影响。

那么存储智威汤逊的最安全的方法是什么?

sessionStorage:如果你想要存储令牌,直到页面closures。 localStorage:用于持久性存储。 Cookies:帮助令牌在一段时间后过期。

您可以将JWT存储在任何您想要的地方。 如果你想保护它,你可以encryption令牌并将其存储在localstorage / cookies中; 并保持您的angularJs应用程序中的键作为一个常量。 所以,令牌将保持安全,只能从您的应用程序解密。

不要把Angular应用程序中的键保持为常量。 如果要安全地validationJWT令牌,请从localStorage检索JWT,并在$ http.get()调用的授权标头中将其发送到服务器。

密钥只能通过服务器上的代码查看/访问。 当服务器从Authorization头获得JWT时,它可以检查JWT有效载荷是否被篡改。 如果它已经返回一些授权错误返回到$ http.get()调用。