Security 一次登录Spring SAML CRSF

Security 一次登录Spring SAML CRSF,security,spring-security,spring-saml,onelogin,Security,Spring Security,Spring Saml,Onelogin,我使用Spring Saml解决方案来保护在tomcat上运行的rest api 我正在使用spring-security-saml2-core1.0.2.RELEASE和spring-security 4.1.1.RELEASE 我已经创建了Onelogin测试连接器/应用程序。如果我尝试访问,我将被正确重定向到Onelogin并可以进行身份验证。然后我被重定向到 问题::重定向后,我得到“无法验证提供的CSRF令牌,因为找不到您的会话。” 这是根据 Vladimír Schäfer提供的解决

我使用Spring Saml解决方案来保护在tomcat上运行的rest api

我正在使用spring-security-saml2-core1.0.2.RELEASE和spring-security 4.1.1.RELEASE

我已经创建了Onelogin测试连接器/应用程序。如果我尝试访问,我将被正确重定向到Onelogin并可以进行身份验证。然后我被重定向到

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

这是根据

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

这是可行的,但由于我不熟悉spring security和spring security,因此我必须处理相关的查询:

  • 对于Spring SAML URL,在这种情况下关闭rest api上的CSRF是否安全/最佳做法

  • 如果在Spring security中启用了CSRF,Onelogin是否有办法使用Spring Saml


    • 我不是弹簧专家,但我想我可以解决你的疑问

      跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在其当前已通过身份验证的web应用程序上执行不必要的操作

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

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

      • ACS。断言消费者服务
      • SLS。单一登出服务
      在启动SP启动的SSO或SP启动的SLO端点上,我认为可以维护CSRF保护


      关于另一个问题,我认为唯一的方法是在spring中使用CSRF值保存一个状态,传递一种恢复状态的方法作为RelayState参数。Onelogin将返回除SAMLResponse之外的relayState参数,您将能够恢复您的状态、恢复CSRF并避免CSRF令牌错误。

      我不是Spring专家,但我认为我可以解决您的疑问

      跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在其当前已通过身份验证的web应用程序上执行不必要的操作

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

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

      • ACS。断言消费者服务
      • SLS。单一登出服务
      在启动SP启动的SSO或SP启动的SLO端点上,我认为可以维护CSRF保护

      关于另一个问题,我认为唯一的方法是在spring中使用CSRF值保存一个状态,传递一种恢复状态的方法作为RelayState参数。Onelogin将在SAMLResponse之外发回relayState参数,您将能够恢复您的状态、恢复CSRF并避免CSRF令牌错误