Spring Security Java Spring安全性|JWT csrf标记在/login上不起作用

nafvub8i  于 2022-12-29  发布在  Spring
关注(0)|答案(1)|浏览(165)

我刚刚看了一个spring security的教程。我遇到了一个问题,我有一个jwt应用程序,想激活csrf。但是它对/login不起作用。当我创建一个不需要身份验证的路径时,csrf令牌起作用。只有对路径/login它不起作用。
这是我的配置

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                //.csrf().disable()
                .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .and()
                .sessionManagement()
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .addFilter(new JwtUsernameAndPasswordAuthenticationFilter(authenticationManager(), jwtConfig, secretKey))
                .addFilterAfter(new JwtTokenVerifier(secretKey, jwtConfig),JwtUsernameAndPasswordAuthenticationFilter.class)
                .authorizeRequests()
                .antMatchers("/", "index", "/css/*", "/js/*").permitAll()
                .antMatchers("/public/**").permitAll()
                .antMatchers("/api/**").hasRole(USER.name())
                .anyRequest()
                .authenticated();
    }

我试着自己去谷歌一下,但是答案对我来说太高了。也许有人能用简单的话帮助我。
未认证的公共请求x1c 0d1x
以及/login请求,其中csrf标记不能工作

q3aa0525

q3aa05251#

谢谢你的问题,你可以参考下面的文章来解决这个问题。
https://www.baeldung.com/csrf-stateless-rest-api
可以根据本文为REST API实现Csrf保护,因为在某些可能的情况下,攻击者可能会尝试从用户的浏览器存储中窃取令牌,并使用它来访问应用程序的REST端点。
根据文章

Spring期望在X-XSRF-TOKEN标头中接收它

因此您可以尝试在X-XSRF-TOKEN报头中发送令牌,而不是cookie。
希望这个有用。
谢啦,谢啦

相关问题