【发布时间】:2015-03-03 19:27:50
【问题描述】:
我有两个 Web 应用程序,一个用于 AngularJS 中的 Web UI,另一个用于 Java 中的 REST Web 服务。两者都部署在不同的域上。
应用程序使用 cookie 进行身份验证。每当用户输入有效的用户名和密码时,服务器都会返回一个包含令牌的仅 http cookie,并且该 cookie 会在所有请求中传递。我在两个应用程序上都启用了 CORS,这就是会话 cookie 正常工作的原因。
现在,我正在尝试为此添加 CSRF 保护。我试图使用csrf cookie,服务器将发送csrf cookie(不是httponly)作为REST响应的一部分,UI将从cookie中读取值并将其传递给其他REST调用的csrf令牌头。
我面临的这种方法的问题是,由于服务器位于不同的域中,我无法在 AngularJs 中使用 $cookies 读取 cookie。有没有办法读取那个 cookie 的值? 如果没有,那我可以通过其他方式实现 CSRF 吗?
我还尝试在浏览器中实现在 Web UI 本身上创建 csrf cookie,但浏览器不会将 cookie 发送到不同域中的 web 服务。
那么,我的问题是如何针对这种情况实施 csrf 保护?
【问题讨论】:
标签: angularjs cookies cross-domain csrf csrf-protection