Spring Security: autenticación en memoria

Spring Security es un marco de autenticación y control de acceso potente y altamente personalizable. Es el estándar de facto para proteger las aplicaciones basadas en Spring. Spring Security es un marco que se enfoca en proporcionar autenticación y autorización a las aplicaciones Java. Como todos los proyectos de Spring, el verdadero poder de Spring Security se encuentra en la facilidad con la que se puede ampliar para cumplir con los requisitos personalizados. Algunas de las características clave de Spring Security son:

  • Soporte completo y extensible para autenticación y autorización
  • Protección contra ataques como fijación de sesión, clickjacking, falsificación de requests entre sitios, etc.
  • Integración de API de servlets
  • Integración opcional con Spring Web MVC.

Analicemos primero la autenticación simple básica de Spring Security . En la autenticación simple, Spring Security proporciona un nombre de usuario predeterminado y la contraseña que debemos usar para una autenticación válida.

XML

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Página de inicio de sesión de autenticación simple de Spring Security:

Clave:

Es muy difícil recordar esta contraseña porque es una contraseña aleatoria y Spring Security genera una contraseña aleatoria cada vez que ejecutamos la aplicación Spring. Si queremos agregar un nombre de usuario y una contraseña personalizados en la aplicación Spring para la autenticación, podemos agregarlos fácilmente (usando application.properties), pero si queremos hacer que nuestra aplicación Spring sea para múltiples usuarios, es difícil configurar sus credenciales. Entonces, para superar esta situación cuando manejamos múltiples autenticaciones junto con sus respectivos roles. Usaremos la autenticación en memoria en la aplicación Spring.

 La autenticación en memoria es la forma de manejar la autenticación en Spring Security. En la autenticación en memoria, recopilamos todos los detalles del usuario, como roles, contraseñas y el nombre de usuario. Podemos realizar la validación hasta que el servidor Spring se esté ejecutando. Si el servidor se detiene, la memoria se borra y no podemos realizar la validación. Este es el principal inconveniente de la autenticación en memoria.

inMemoryAuthentication() es el método de la clase AuthenticationManagerBuilder que se utiliza para realizar la autenticación en memoria en Spring Security. Este método se utiliza para crear el usuario con sus respectivos roles y contraseñas. Analicemos cómo implementar inmemoryAuthentication en Spring Security.

Implementación paso a paso

Paso 1: crear un proyecto Spring Boot

Project: Maven
Language: Java
Spring Boot: 2.2.8
Packaging: JAR
Java: 8
Dependencies: Spring Web,Spring Security

Paso 2: haga clic en Generar, que descargará el proyecto de inicio.

Estructura del proyecto:

Paso 3: extraiga el archivo zip. Ahora abra un IDE adecuado y luego vaya a Archivo > Nuevo > Proyecto de fuentes existentes > Spring-boot-app y seleccione pom.xml. Haga clic en importar cambios en el aviso y espere a que el proyecto se sincronice como se muestra a continuación:

Nota : en la ventana Importar proyecto para Maven, asegúrese de elegir la misma versión de JDK que seleccionó al crear el proyecto.

Paso 4: ahora vaya a src> main> java> com.gfg.Spring.boot.app y cree dos archivos java, uno es controller.java y el otro es config.java

controlador.java

Java

@RestController
public class controller {
  
    @GetMapping("/delete") public String delete()
    {
        return "This is the delete request";
    }
}

El archivo java anterior se usa para configurar el controlador para manejar la solicitud entrante desde el lado del cliente. Ahora tenemos que configurar la solicitud para eso usaremos el archivo config.java.

config.java

Este archivo de configuración amplía la clase WebSecurityConfigureAdapter y reemplazamos dos métodos configure (AuthenticationManagerBuilder auth) y configure (HttpSecurity Http) , ambos métodos se usan para manejar las múltiples autenticaciones en la aplicación Spring.

  • El primer método se usa para agregar las credenciales de los usuarios con roles respectivos en inMemory of SpringApplication.
  • El segundo método se usa para manejar la API definida por el usuario en la aplicación Spring.

Java

package com.example.SpringBootApp;
  
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
  
@EnableWebSecurity
public class config extends WebSecurityConfigurerAdapter {
  
    // Adding the roles
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("Zack")
                .password("aayush")
                .roles("admin_role")
                .and()
                .withUser("GFG")
                .password("Helloword")
                .roles("student");
    }
  
    // Configuring the api
    // according to the roles.
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.
                httpBasic()
                .and()
                .authorizeRequests()
                .antMatchers("/delete").hasRole("admin_role")
                .antMatchers("/details").hasAnyRole("admin_role","student")
                .and()
                .formLogin();
    }
  
    // Function to encode the password
    // assign to the particular roles.
    @Bean
    public PasswordEncoder getPasswordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }
}

Nota : No se genera una contraseña predeterminada porque ya hemos utilizado una configuración externa para manejar las credenciales de usuario.

Probando la API en Postman

Vaya al cartero y escriba localhost:8080/delete

Uso de los roles de administrador:

Uso de la función de estudiante: intente acceder a la API de detalles utilizando el nombre de usuario y la contraseña de la función de estudiante.

Publicación traducida automáticamente

Artículo escrito por zack_aayush y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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