8

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

那就是 ---也在client.example.com进行POSTapi.example.com/login,成功时也会返回会话 cookie,client.example.com并且也可以访问GET服务,如api.example.com/secret受会话 cookie 保护的服务。

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

最终,这里的目标是使用 CORS 和本地策略(即用户名和密码)向 REST api 验证客户端应用程序,即使上述约定是不可能的。

我找不到可以从任何地方学习的可行方法——为我指明正确的方向?

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

4

1 回答 1

2

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

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

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

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

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

于 2013-04-23T05:57:14.513 回答