Angular.js 的 Node.js CORS 会话 cookie

Posted

技术标签:

【中文标题】Angular.js 的 Node.js CORS 会话 cookie【英文标题】:Node.js CORS session cookie with Angular.js 【发布时间】: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:***.com/questions/1062963/… @alexwen 如果我想接受来自任何域的内容,例如 --- client.example1.comclient.example2.com。这里的目标是使用 CORS 和本地策略验证客户端应用程序和 REST api --- 即 usernamepassword 【参考方案1】:

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

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

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

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

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

【讨论】:

以上是关于Angular.js 的 Node.js CORS 会话 cookie的主要内容,如果未能解决你的问题,请参考以下文章

Angular JS 和 node.js

使用 Angular.js 和 Node.js 构建实时应用程序的更好方法是啥?

Node.js Angular.js Vue.js视频教程合集

Node.js、angular.js 和 MongoDB 入门、建模关系和其他提升技巧 [关闭]

当我尝试从 Angular.js 发送到 Node.js 时,单独的数据丢失了

使用 node js 和 angular js 和 mysql 数据库