Angular 带有jwt令牌/cookies的SPA+web api

Angular 带有jwt令牌/cookies的SPA+web api,angular,asp.net-web-api,jwt,Angular,Asp.net Web Api,Jwt,我有一个SPA Angular 5应用程序,在后端有一个ASP.NET核心Web API作为纯Web API,它们可以托管在不同的服务器/域上。在线搜索和读取后,我知道我们可以将令牌存储在localstorage或httponly cookie中,但这两种方法都有自己的漏洞localstorage易受XSS攻击,cookie易受CSRF攻击 所以我想知道: 现在,人们在生产站点中实际使用的既定方法或实践是什么,在保护Web API安全时,这些方法或实践为XSS和CSRF攻击提供了合理的依据?例如

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

所以我想知道:

现在,人们在生产站点中实际使用的既定方法或实践是什么,在保护Web API安全时,这些方法或实践为XSS和CSRF攻击提供了合理的依据?例如,我查看了portal.azure.com。他们似乎将承载令牌放在请求头中,但我看不到他们将令牌存储在哪里。 SPA和Web API获取防伪代币的常见做法/方式是什么?我找不到这方面的太多信息。
谢谢。

JWT就像用户ID和密码一样,您不应该对敏感数据使用localStorage并不是为了这个目的。例如,阅读这篇好文章和youtube视频:

及 XSRF/CSRF可以通过各种技术避免,如OWASP

一种常见的方法是双重提交Cookie,即使用添加在每个req的http/s头中的xsfr令牌,这是因为攻击者无法修改req的http头

基本上,您必须发送两个cookie:

1个仅含JWT的HTTPCookie 1个不带xsrf令牌的HttpOnly Cookie

然后创建一个拦截器,从cookie中读取xsrf令牌,并添加一个头x-xsrf-token。服务器端检查JWT中的xsrf令牌是否等于x-xsrf-token中的令牌使用xsrf令牌的不可用alogrithm


希望有帮助

谢谢你的回答。我想知道如果我的SPA在域A中,后端web api在域B中,double submit cookie是否可以工作?如何获取CSRF令牌?您好,但域B是域a的子域?很可能我们可以将域B作为a的子域。您好,在这种情况下,可以将域的cookie发送到子域。您必须将设置Cookie头设置为:set Cookie:name=value;domain=mydomain.com您可以在此处找到axplanation: