我正在开发一个 Web 应用程序的后端 API(使用 Spring Boot)。 API 使用 JWT 令牌对用户进行身份验证。我有一个用于注册帐户的端点 (
POST /register
)。
由于它是POST方法,因此需要前端提供CSRF令牌,我还将CSRF令牌附加在每个响应的标头中。然而,当前端想要调用这个端点时,它需要先发送一个虚拟注册请求(这会失败),只是为了获取 CSRF 令牌。我的问题是:他们是否有更好的方法来获取 CSRF 令牌?我是否应该创建一个端点
GET /csrf
只是为了在注册之前获取令牌?
顺便说一句,由于我对网络安全性比较陌生,我想知道在每个响应中附加 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();
}
如果我们将 crsf 令牌存储在 cookie 中并将 HttpOnly 设置为 false,我担心它可能会给恶意用户提供获取 crsf 令牌以发起 crsf 攻击的机会。