我已经使用Node.js/Express构建了一个API,我目前正在使用Angular应用程序。节点API和Angular应用程序 - 理解在Cookie中存储JWT
对于身份验证,我有一个用户名/密码设置,然后返回一个愉快使用的JWT。
现在,我已经花了一些时间(并阅读such Stormpath articles)我想使用Cookie而不是localstorage来存储这些JWT。那就是我的问题开始。
所以我到目前为止基本上做的是更新保存和读取,例如,用于从$window.localStorage['jwtToken'] = token;
节省到$cookies.put('jwtToken', token);
。而对于阅读,从return $window.localStorage['jwtToken'];
到return $cookies.get('jwtToken');
在这个阶段,我想知道是否有人可以帮助我了解的几个位,请正确的,告诉我任何知识缺失的部分:
1 - 因此,除了上面的实际保存和读取,还有什么我需要明确设置 - 我认为是HttpOnly
cookie标志(所以JS无法访问cookie数据。
1b - 我还需要更新我的节点API,以代替返回res.json
其做res.cookie
?
2 - 我是否还需要设置Secure
Cookie标志,以便通过HTTP发送它。所以目前我写了一个简单的authInterceptor,它为每个请求附加一个头部:config.headers['x-access-token'] = token;
。这是哪个secure
cookie标志将被设置?
3 - 所以使用cookie我正确地理解XSS攻击被最小化,因为JS无法触及cookie,但是我需要专注于CSRF。为此,我正在考虑在我的节点api服务器端使用这个CSRF middleware,并将其与012S中描述的XSRF-TOKEN中构建的Angulars一起使用。这是一个很好的实现吗?
4 - 在查看Chrome检查器时,我看到包含JWT的Cookie,但是HTTP/Secure/Same-Site都被取消了存储,并且Expires表示Session。有人可以解释一下这是什么意思:
叹了口气,我认为这是它,对不起,如果它有点长啰。希望别人能从我们在这里学到的东西中获益。
任何帮助表示赞赏。
谢谢。
感谢 - 所以在问题1b我的意思是说我的API返回JSON(我使用express的'res.json()',所以我第一次改变,我认为需要在后端,以便其实际返回一个cookie? 这也意味着现在每个响应都需要一个cookie?例如,即使我发送基本的公共可视数据? – userMod2
是的,你可以改变它来设置cookie,而不是从JS设置它。 – Erlend
你说'可以改变它设置一个cookie' - 是否有一个很大的安全风险,我可以避免,如果我不呢? 我现在才明白,如何将它保存在cookie中会突然使它更安全。如果你知道我应该阅读的任何页面,我将非常感谢任何指导 – userMod2