Node API和Angular App - 了解在Cookie中存储JWT

时间:2016-04-26 22:28:05

标签: angularjs node.js cookies xss csrf-protection

我已经使用Node.js / Express构建了一个API,我目前正在使用我的Angular应用程序。

对于身份验证,我有一个用户名/密码设置,然后返回一个愉快使用的JWT。

现在,我已经花了一些时间(并且阅读such Stormpath articles)我想使用cookies而不是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 - 所以使用cookies是正确的,因为JS无法触及cookie,因此最小化XSS攻击,但我需要专注于CSRF。为此我想在我的节点api服务器端使用这个CSRF middleware,并将其与XSRF-TOKEN中内置的Angulars一起使用,如here所述。这是一个很好的实现吗?

4 - 在查看Chrome检查器时,我看到包含JWT的cookie,但是HTTP / Secure / Same-Site都被取消了,而Expires说会话。有人可以解释这意味着什么: enter image description here

叹了口气,我想是的,抱歉,如果它有点长啰嗦。希望其他人可以从我们在这里学到的东西中获益。

任何帮助表示感谢。

感谢。

1 个答案:

答案 0 :(得分:0)

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