Autenticación múltiple en Spring Security

Si no desea continuar ejecutando la siguiente configuración de autenticación tan pronto como se pasa una autenticación, puede usar `AuthenticationManager` y `ProviderManager` en Spring Security para lograrlo.

`ProviderManager` es uno de los componentes centrales de Spring Security y es responsable de administrar una serie de proveedores de autenticación. De forma predeterminada, intenta autenticarse utilizando cada proveedor por turno hasta que uno tiene éxito o todos fallan.

Sin embargo, puede personalizar un `AuthenticationManager` y configurarlo para usar solo el primer proveedor de autenticación que tenga éxito. De esta manera, si el primer proveedor se autentica correctamente, no se intentará con los proveedores posteriores.

He aquí un ejemplo sencillo:

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomAuthenticationProvider usernamePasswordAuthProvider;
    
    @Autowired
    private TokenAuthenticationProvider tokenAuthProvider;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(usernamePasswordAuthProvider)
            .authenticationProvider(tokenAuthProvider);
    }

    @Bean
    @Override
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return new ProviderManager(Arrays.asList(usernamePasswordAuthProvider, tokenAuthProvider));
    }
}

En el ejemplo anterior, `ProviderManager` se configurará para autenticarse en el orden de la lista de proveedores, y solo después de que el primer proveedor se autentique exitosamente, no se intentarán los proveedores posteriores. De esta manera, si el primer proveedor se autentica correctamente, no pasará al siguiente proveedor.

`ProviderManager` es el administrador de autenticación principal en Spring Security, responsable de administrar una serie de proveedores de autenticación. Su principio se basa en el patrón de cadena de responsabilidad, en el que cada proveedor se prueba por turno durante el proceso de verificación hasta que un proveedor tiene éxito en la verificación o todas las verificaciones fallan.

Específicamente, `ProviderManager` funciona de la siguiente manera:

1. **Proceso de autenticación activado:** Cuando una solicitud requiere autenticación, la cadena de filtros de Spring Security activa el proceso de autenticación. Se llama a `ProviderManager` para realizar la autenticación real.

2. **Lista de proveedores de autenticación:** `ProviderManager` recibe uno o más proveedores de autenticación que implementan la interfaz `AuthenticationProvider`. Cada proveedor es responsable de diferentes métodos de autenticación, como verificación de nombre de usuario y contraseña, verificación de token, etc.

3. **Intente la verificación uno por uno:** `ProviderManager` intentará llamar al método `authenticate` del proveedor uno por uno en el orden de la lista de proveedores para su verificación. Si un proveedor autentica exitosamente su identidad, devuelve un objeto "Autenticación" que indica que la autenticación fue exitosa.

4. **Aborto de autenticación:** Si algún proveedor se autentica exitosamente, `ProviderManager` detendrá inmediatamente los intentos posteriores de autenticación del proveedor y devolverá un objeto de `Autenticación` exitoso a la persona que llama. Esta es la razón por la que, mientras se verifique un proveedor, no se volverá a intentar con los proveedores posteriores.

5. **Error en toda la autenticación:** Si todos los proveedores no pueden autenticarse, `ProviderManager` generará una excepción apropiada para indicar el error de autenticación.

De esta manera, cuando `ProviderManager` implementa múltiples métodos de autenticación, puede garantizar que mientras se pase una autenticación, se detendrán los intentos de autenticación posteriores, logrando así el efecto de no continuar ejecutando la siguiente mientras se pase una autenticación. Esto es útil para escenarios que admiten múltiples métodos de autenticación y pueden implementar una lógica de autenticación diferente basada en diferentes proveedores de autenticación.

Supongo que te gusta

Origin blog.csdn.net/canduecho/article/details/132609262
Recomendado
Clasificación