Saltar al contenido

¿Cómo simular la autenticación JWT en una prueba unitaria de arranque de primavera?

Bienvenido a nuestra comunidad, aquí encontrarás la respuesta que estás buscando.

Solución:

Si entiendo bien tu caso hay una de las soluciones.

En la mayoría de los casos, JwtDecoder bean realiza el análisis y la validación del token si el token existe en los encabezados de solicitud.

Ejemplo de su configuración:

    @Bean
    JwtDecoder jwtDecoder() 
        /*
        By default, Spring Security does not validate the "aud" claim of the token, to ensure that this token is
        indeed intended for our app. Adding our own validator is easy to do:
        */

        NimbusJwtDecoder jwtDecoder = (NimbusJwtDecoder)
            JwtDecoders.fromOidcIssuerLocation(issuer);

        OAuth2TokenValidator audienceValidator = new AudienceValidator(audience);
        OAuth2TokenValidator withIssuer = JwtValidators.createDefaultWithIssuer(issuer);
        OAuth2TokenValidator withAudience = new DelegatingOAuth2TokenValidator<>(withIssuer, audienceValidator);

        jwtDecoder.setJwtValidator(withAudience);

        return jwtDecoder;
    

Entonces, para las pruebas, debe agregar el trozo de este bean y también para reemplazar este bean en el contexto de primavera, necesita la configuración de prueba con él.

Pueden ser algunas cosas como esta:

@TestConfiguration
public class TestSecurityConfig 12345678";

  public JwtDecoder jwtDecoder() 
    // This anonymous class needs for the possibility of using SpyBean in test methods
    // Lambda cannot be a spy with spring @SpyBean annotation
    return new JwtDecoder() 
      @Override
      public Jwt decode(String token) 
        return jwt();
      
    ;
  

  public Jwt jwt() 

    // This is a place to add general and maybe custom claims which should be available after parsing token in the live system
    Map claims = Map.of(
        SUB, USER_AUTH0ID
    );

    //This is an object that represents contents of jwt token after parsing
    return new Jwt(
        AUTH0_TOKEN,
        Instant.now(),
        Instant.now().plusSeconds(30),
        Map.of("alg", "none"),
        claims
    );
  


Para usar esta configuración en las pruebas, simplemente seleccione esta configuración de seguridad de prueba:

@SpringBootTest(classes = TestSecurityConfig.class)

También en la solicitud de prueba debe haber un encabezado de autorización con un token como Bearer .. something.

Aquí hay un ejemplo con respecto a su configuración:

    public static RequestBuilder getAllRoundsByUserId(String userId) 

        return MockMvcRequestBuilders
            .get("/users/" + userId + "/rounds/")
            .accept(MediaType.APPLICATION_JSON)
            .header(HttpHeaders.AUTHORIZATION, "Bearer token"))
            .contentType(MediaType.APPLICATION_JSON);
    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *