我正在开发Web应用程序的后端API(使用Sping Boot )。API使用JWT令牌对用户进行身份验证。我有一个用于注册帐户的端点(POST /register
)。
因为它是一个POST方法,所以它需要来自前端的CSRF令牌,我还将CSRF令牌附加在每个响应的头中。然而,当前端想要调用这个端点时,它需要首先发送一个虚拟注册请求(这将失败),只是为了获得CSRF令牌。我的问题是:有没有更好的方法让他们获得CSRF代币?我应该创建一个端点GET /csrf
只是为了在注册之前获取令牌吗?
顺便说一下,由于我对Web安全性相对较新,我想知道在每个响应中附加CSRF令牌是否是一个好的做法?这是我在Spring中的配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/register").permitAll()
.anyRequest().authenticated();
}
1条答案
按热度按时间okxuctiv1#
如果我们将crsf令牌存储在cookie中,并将HttpOnly设置为false,我担心这会给恶意用户给予机会来获得crsf令牌以发动crsf攻击。