Spring Boot Rest 6/10 – Agregando seguridad básica de HTTP al proyecto

16

En el anterior artículo, revisamos cómo exponer endpoints mediante Controladores Rest. En este artículo agregaremos autenticación básica de HTTP al proyecto.

Dependencias

Como lo vimos en el primer artículo de esta serie, es necesario contar con las dependencias adecuadas para que las siguientes configuraciones funcionen, en este caso:

dependencies {
   implementation 'org.springframework.boot:spring-boot-starter-security'
...

Security Configuration

Para agregar seguridad a nuestro proyecto, crearemos una clase anotada con @Configuration, @EnableWebSecurity y que herede de WebSecurityConfigurerAdapter. De esta forma sobreescribiremos el métoédo configure, para especificar qué tipo de autenticación agregaremos y sobre qué URIs (en este caso todas), así como qué ROLE de usuarios tendrá acceso.

Finalmente agregaremos un usuario en memoria que cuente con el ROLE que necesitamos. Nota que la contraseña está en claro y es solo para efectos demostrativos de este demo. Recuerda usar algoritmos de hashing como BCrypt (del cual Spring tiene una implementación) para que las credenciales de tus usuarios viajen seguras.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
                .anyRequest()
                .hasRole("CLIENT")
            .and().httpBasic();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        //No password encrypt for demo proposes only (do NOT use in Prod environments)!!
        auth.inMemoryAuthentication()
            .withUser("client")
            .password("{noop}client")
            .roles("CLIENT");
    }

De esta forma, todas las request que intenten acceder a nuestra app, requerirán de una autenticación básica de HTTP. Nota que puedes cambiar el tipo de autenticación o agregar/cambiar usuarios en estos métodos.

En caso de que no agregues estas configuraciones a tu proyecto, Spring Boot agregará automáticamente autenticación básica con el usuario: user y una contraseña aleatoria que saldrá en los logs de arranque de tu proyecto.

En el siguiente artículo, revisaremos cómo agregar documentación de Swagger a nuestro proyecto. 😉

Repositorio de Github

Puedes encontrar el código del proyecto en el siguiente repositorio de Github:

https://github.com/chuucks/coffee-service


La configuración del proyecto de Spring Boot con Gradle, conexión a Mongo DB y autenticación básica de HTTP, en esta plataforma tiene únicamente fines educativos e ilustrativos. Para usar en producción requiere de mayores consideraciones, configuraciones y especificaciones. No dudes en contactarnos para cualquier duda o comentario o incluso abrir un Issue de Github en el repositorio del proyecto. 👍🏾

Comments

comments