es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Spring Cloud Gateway POST prohibido con CSRF habilitado.

Quiero habilitar CSRF en Spring Cloud Gateway con webflux. Tengo una configuración mínima para eso, como se describe en el siguiente enlace:
https://docs.spring.io/spring-security/site/docs/5.2.x/reference/html/protection-against-exploits-2.html#webflux-csrf-configure

@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
class WebSecurityConfiguration {
@Bean
SecurityWebFilterChain SecurityWebFilterChain(ServerHttpSecurity http) {
    return http
            .httpBasic().disable()
            .formLogin().disable()
            .oauth2Login().and()
            .csrf().csrfTokenRepository(new CookieServerCsrfTokenRepository()).and()
            .authorizeExchange()
            .pathMatchers("/**").authenticated()
            .and().build();
}
@ControllerAdvice
public class SecurityControllerAdvice {
    @ModelAttribute
    Mono<csrftoken> csrfToken(ServerWebExchange exchange) {
        Mono<csrftoken> csrfToken = exchange.getAttribute(CsrfToken.class.getName());
        return csrfToken.doOnSuccess(token -> exchange.getAttributes()
                .put(CsrfRequestDataValueProcessor.DEFAULT_CSRF_ATTR_NAME, token));
    }
}

Sin embargo, todavía obtengo un error 403 al hacer una solicitud POST con el siguiente mensaje en el cuerpo:
Se ha asociado un token CSRF a este cliente

¿Alguien puede ayudarme, por favor?

PD: En estas preguntas, el usuario ha deshabilitado CSRF donde también se produce el mismo error, pero necesito mantenerlo habilitado:

https://stackoverflow.com/questions/66721649/csrf-token-has-been-associated-to-this-client

https://stackoverflow.com/questions/60971877/spring-cloud-gateway-post-forbidden

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar el problema de obtener un error 403 en las solicitudes POST con el mensaje “CSRF Token has been associated to this client”, puedes intentar los siguientes pasos:

    1. Asegúrate de que la protección CSRF esté habilitada en tu aplicación Spring Cloud Gateway, como se describe en la configuración mínima proporcionada en el enlace que compartiste.
    2. Asegúrate de que tu aplicación cliente esté enviando el token CSRF en la solicitud. Puedes comprobar esto inspeccionando las cabeceras de la solicitud y buscando una cabecera llamada “X-CSRF-TOKEN” o “X-XSRF-TOKEN”, dependiendo de tu configuración.

    3. Si el cliente no está enviando el token CSRF, es posible que necesites modificar tu aplicación cliente para obtener el token e incluirlo en las cabeceras de la solicitud. Puedes utilizar el controlador de consejos proporcionado en el enlace que compartiste para exponer el token CSRF como un atributo de modelo en tus plantillas.

    4. Si el cliente está enviando el token CSRF pero aún así obtiene un error 403, es posible que necesites comprobar si el token se está validando correctamente en el lado del servidor. Puedes utilizar herramientas de depuración para seguir el código y identificar cualquier problema con la validación del token CSRF. También puedes intentar desactivar temporalmente la protección CSRF para ver si el problema está relacionado con CSRF o con otra cosa.

    En general, habilitar la protección CSRF en Spring Cloud Gateway con webflux requiere de alguna configuración y un manejo cuidadoso del token CSRF tanto en el lado del cliente como en el lado del servidor. Siguiendo los pasos anteriores y solucionando cualquier problema que surja, puedes asegurarte de que tu aplicación esté protegida contra ataques CSRF.

Comments are closed.