【问题标题】:Spring Boot Security and Auth0 - Cannot disable CSRFSpring Boot Security 和 Auth0 - 无法禁用 CSRF
【发布时间】:2016-07-21 23:46:48
【问题描述】:

我正在构建一个 RESTful Spring Boot 和 React/Alt 应用程序。我想添加 spring 安全性以确保对 API 没有未经身份验证的请求。

我将 Auth0 用作身份验证提供程序,因此用户可以登录应用程序,更具体地说是 spring-security-auth0 库来处理服务器端安全方面的事情。 https://github.com/auth0/spring-security-auth0

在学习了关于 Auth0 的基本教程之后,我已经在我的 Spring 应用程序中配置了安全配置,这样如果没有 JSON Web 令牌,对 API 的请求将无法工作。这可行,但控制器中有一些端点(需要 POST 的端点)不需要。我在 Chrome 开发工具中收到此错误 -

Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'

我知道没有 CSRF 标头存在,这就是它不起作用的原因。但我感到困惑的主要原因是我禁用了 CSRF 并且它仍然会发生。正如 spring 文档所指示的那样,我已经做到了 -

@Configuration
@EnableWebSecurity
@ComponentScan("com.auth0")
@ImportResource("classpath:auth0-security-context.xml")
@PropertySource("classpath:auth0.properties")
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
    }

在这种情况下,我不需要 CSRF,因为该应用只会在开发环境中使用。为什么即使我完全禁用了 CSRF,仍然会出现这种情况?

【问题讨论】:

    标签: java spring security reactjs spring-security


    【解决方案1】:

    负责异常的 CsrfFilter 已明确启用。 这可能有多种原因。是否可以在某处配置另一个 WebSecurityConfigurerAdapter 实例?

    您可以尝试以下方法:

    在'http.csrf().disable();'行设置断点看看它是否真的被执行了。

    在 WebSecurityConfigurerAdapter 的构造函数中设置断点以查看是否创建了许多实例。

    这应该告诉你出了什么问题..

    【讨论】:

    • 是的,我已经这样做了,但是我对 Spring 中的 XML 配置不是很熟悉。我决定将 Auth0 安全上下文 xml 转换为 Java Config 并在其中禁用 CSRF。现在一切正常,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 2020-05-09
    • 2018-12-12
    • 2015-12-10
    • 2014-04-26
    • 2015-09-27
    • 2015-10-16
    相关资源
    最近更新 更多