Spring security CSRF CORS

时间:2015-05-14 06:57:55

标签: angularjs rest spring-security cors csrf

问题陈述:我有一些使用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令牌错误。

方法我通过扩展你的例子到目前为止尝试了:

  1. 添加了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");
    
  2. 上面没有运气。

    请建议我是否需要做任何其他事情才能使其发挥作用。

    谢谢, 苏曼

1 个答案:

答案 0 :(得分:1)

CSRF和CORS不是一回事。您现在可能已将CORS部件排序,但您需要将CSRF令牌添加到任何POST / PUT / DELETE请求。 Spring Security在您引用的博客系列的标题中发送令牌,Angular从那里发送它(您需要添加几行代码才能使其正常工作)。