【问题标题】:Node.js CORS session cookie with Angular.jsAngular.js 的 Node.js CORS 会话 cookie
【发布时间】:2013-04-16 01:37:47
【问题描述】:

我正在使用带有 CORS 和 Angular.js 的 Node.js 进行简单登录。

那就是 --- client.example.com 也在进行 POST api.example.com/login 成功时也会返回会话 cookie client.example.com 并且可以通过 GETapi.example.com/secret 这样的服务受会话 cookie 保护。

发出不受会话 cookie 保护的 GET 请求不是问题。

最终,这里的目标也是 authenticate a client side app to a REST api using CORS with a local stradegy --- 即用户名和密码 --- 即使上面的约定是不可能的。

我在任何地方都找不到有效的学习方法 --- 为我指明正确的方向?

奖励:展示一个工作示例。

【问题讨论】:

  • 这只有在您将 cookie 的域设置为 .example.com 时才有可能。您不能从 api.example.com 为 client.example.com 设置 cookie:stackoverflow.com/questions/1062963/…
  • @alexwen 如果我想接受来自任何域的内容,例如 --- client.example1.comclient.example2.com。这里的目标是使用 CORS 和本地策略验证客户端应用程序和 REST api --- 即 usernamepassword

标签: javascript node.js angularjs cors


【解决方案1】:

您的问题很简单,浏览器不允许将设置在一个域中的 cookie 发送到另一个域。
这是为了安全。如果您的会话 cookie 可以从任何域访问,那么任何站点都可以执行 csrf(根据定义,您想要执行 csrf - 使用来自不同站点的一个站点的会话)。

有一些方法可以绕过它,但在应用它们时应该小心。

  • 最简单的方法是使用Jsonp登录跨域请求,jsonp基本上打破了cookies跨域策略。

  • 您可以在位于api.example.comclient.example.com 页面中嵌入iFrame,父级和iFrame 可以使用post message 进行通信。

这两种方式都对 csrf 请求开放(就其本质而言),因此您应该格外小心您允许 client.example.com 访问的信息。

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 2012-03-08
    • 2016-04-30
    • 2020-11-08
    • 2014-06-04
    • 2014-08-05
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多