问题陈述:我有一些使用Spring安全保护CSRF的RESTful API。此外,这些API将通过Angular WEB UI从不同的Origin / domain 访问。我不需要Spring身份验证,因为身份验证由Siteminder处理。
方法 我从Dave Syer那里获得了CSRF保护的链接:The Login Page: Angular JS and Spring Security Part II除了一个问题(下面)之外完美地工作。
问题:当我的角色html客户端在同一个源/域上访问RESTful API时,此代码工作正常;但是当我尝试从不同的来源访问相同的API时,收到错误403 - 禁止访问 - CSRF令牌错误。
方法我通过扩展你的例子到目前为止尝试了:
添加了CORS过滤器 - Enabling Cross Origin Requests for a RESTful Web Service
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
上面没有运气。
请建议我是否需要做任何其他事情才能使其发挥作用。
谢谢, 苏曼
答案 0 :(得分:1)
CSRF和CORS不是一回事。您现在可能已将CORS部件排序,但您需要将CSRF令牌添加到任何POST / PUT / DELETE请求。 Spring Security在您引用的博客系列的标题中发送令牌,Angular从那里发送它(您需要添加几行代码才能使其正常工作)。