2016-04-26 29 views
0

我已经使用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。有人可以解释一下这是什么意思: enter image description here

叹了口气,我认为这是它,对不起,如果它有点长啰。希望别人能从我们在这里学到的东西中获益。

任何帮助表示赞赏。

谢谢。

回答

0
  1. 如果您设置的HttpOnly $cookies.get('jwtToken');是行不通的...
    1B。不明白这里的问题...
  2. 如果请求是HTTPS请求,Secure标志会告诉浏览器只包含cookie。您仍然可以发出HTTP请求,但不会包含该Cookie。 document.cookie = "name=somevalue;secure"
  3. 如果您设置HttpOnly,以便JavaScript无法读取cookie,这是一些保护措施,但是如果您有XSS,则所有投注都将关闭。注入的脚本仍然可以执行网络请求,并且执行您的代码正在执行的包含CSRF令牌的操作。您仍然需要CSRF保护,但在大多数情况下,XSS意味着规避CSRF保护。
  4. 会话意味着如果您关闭浏览器(人们不再经常这么做),Cookie将自动删除。
+0

感谢 - 所以在问题1b我的意思是说我的API返回JSON(我使用express的'res.json()',所以我第一次改变,我认为需要在后端,以便其实际返回一个cookie? 这也意味着现在每个响应都需要一个cookie?例如,即使我发送基本的公共可视数据? – userMod2

+0

是的,你可以改变它来设置cookie,而不是从JS设置它。 – Erlend

+0

你说'可以改变它设置一个cookie' - 是否有一个很大的安全风险,我可以避免,如果我不呢? 我现在才明白,如何将它保存在cookie中会突然使它更安全。如果你知道我应该阅读的任何页面,我将非常感谢任何指导 – userMod2

相关问题