一个登录Spring SAML CRSF

时间:2016-10-26 11:11:33

标签: security spring-security spring-saml onelogin

我正在使用Spring Saml解决方案来保护我在tomcat上运行的其他api。

我在Spring安全性4.1.1.RELEASE中使用spring-security-saml2-core 1.0.2.RELEASE。

我创建了一个Onelogin测试连接器/ app。如果我尝试访问http://localhost:8080/app-name/api/getstate,我会正确地重定向到Onelogin并进行身份验证。然后我被重定向到http://localhost:8080/app-name/saml/SSO/alias/defaultAlias

问题::我收到“无法验证提供的CSRF令牌,因为找不到您的会话。”重定向后

这是根据Spring SAML Extension and Spring Security CSRF Protection Conflict

VladimírSchäfer提供的解决方案建议在SAML端点的securityContext中禁用CSRF。

这是有效的,但由于我是一般的弹簧安全和弹簧安全的新手,我必须进行相关的查询:

  • 在这个场景中为Spring SAML URL关闭其余api的CSRF是安全/最好的吗?

  • 如果在Spring安全性中启用CSRF,Onelogin是否有办法使用Spring Saml?

1 个答案:

答案 0 :(得分:4)

我不是春天的专家,但我想我可以解决你的疑虑。

跨站点请求伪造(CSRF)是一种攻击,它强制最终用户在当前对其进行身份验证的Web应用程序上执行不需要的操作。

SAML有自己的机制来防止不需要的操作,例如,在端点上需要签名的SAML消息以验证它们(只有合法的源才能正确签署SAML消息,因此我们避免模拟/消息修改)

基于此,我认为在以下SP端点上禁用CSRF保护是正确的:

  • ACS。断言消费者服务
  • SLS。单点注销服务

在启动SP发起的SSO或SP发起的SLO端点时,我认为可以保持CSRF保护。

与其他问题相关,我认为独特的方法是在春天保存一个具有CSRF值的状态,通过一种方法将状态恢复为RelayState参数。除了SAMLResponse之外,Onelogin还将发回relayState参数,您将能够恢复状态,恢复CSRF并避免CSRF令牌错误。