带有jwt令牌/ cookie的SPA + web api

时间:2018-05-10 07:36:47

标签: angular asp.net-web-api jwt

我有一个带有ASP.NET Core Web API的SPA Angular 5应用程序作为后端的纯Web API(它们可以托管在不同的服务器/域中)。在线搜索和阅读后,我知道我们可以将令牌存储在localstorage或httponly cookie中,但这两种方法都有自己的漏洞(本地存储容易受到XSS的影响,cookie很容易受到CSRF的攻击)。

所以我想知道:

  1. 现在人们在生产网站中实际使用的既定方法或做法是什么,在保护Web API时,保护XSS和CSRF攻击的合理理由?例如,我查看了portal.azure.com。他们似乎在请求标头中放置了承载令牌,但我无法看到他们存储令牌的位置。
  2. SPA和Web API获取防伪令牌的常用做法/方法是什么?我找不到太多关于此的信息。
  3. 感谢。

1 个答案:

答案 0 :(得分:0)

JWT类似于UserID和密码,您不应该使用localStorage来处理敏感数据。阅读这篇好文章和这个youtube vidio:

https://dev.to/rdegges/please-stop-using-local-storage-1i04https://medium.com/spektrakel-blog/local-storage-is-not-a-secure-place-9542cbfa904a 使用各种技术可以避免XSRF / CSRF,阅读OWASP

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

一种常见的方法是(Double Submit Cookie),是使用在每个req的http / s头中添加的xsfr-token,这是因为攻击者无法修改req的http头。

基本上你必须发送两个cookie:

1)与JWT的HttpOnly Cookie 1)no-HttpOnly Cookie with xsrf-token

然后创建一个Interceptor thar从cookie中读取xsrf-token并添加一个头x-xsrf-token。服务器端检查JWT中的xsrf-token是否等于x-xsrf-token中的令牌(对xsrf-token使用不可取的算法)

希望有所帮助