Cómo escribir un proveedor de autenticación para Spring Security
Este tutorial le mostrará cómo crear un proveedor de autenticación Spring Security
para obtener una mayor flexibilidad que el simple UserDetailsService utilizado en escenarios estándar.
2. Proveedor de autenticación
Spring Security proporciona una variedad de opciones para realizar la autenticación, todas las cuales se basan en la siguiente convención:
Solicitud de autenticación Manejada por AuthenticationProvider y devuelve un objeto completamente autenticado que contiene todas las credenciales.
La implementación estándar y más utilizada es DaoAuthenticationProvider,
que obtiene detalles del usuario a través de un DAO de usuario simple de solo lectura llamado
UserDetailsService. Aunque queremos obtener la entidad de usuario completa, UserDetailsService
solo tiene acceso al nombre de usuario, pero en la mayoría de los casos esto es suficiente.
lwei
Traducido
Hace 2 años
1 persona respondió
Me gustó muy bien traducir!
Más escenarios de aplicaciones definidas por el usuario requieren acceso a la solicitud de autenticación completa para completar el proceso de autenticación -
Por ejemplo, cuando se autentica en servicios externos de terceros como Crowd -
p>
Para autenticarse en servicios externos de terceros, como Crowd, se requieren tanto el nombre de usuario como la contraseña en la solicitud de autenticación.
Para estos casos de uso más avanzados, necesitamos definir un proveedor de autenticación personalizado:
1
2
3
4
5
6
7
8
9
9
p>
10
11
12
13
14 p>
15
16
17
18
19
20
21
22
23
@Component publicclass CustomAuthenticationProvider implementa AuthenticationProvider {
@Override
autenticación de autenticación pública (autenticación de autenticación) lanza AuthenticationException {
Nombre de cadena = autenticación.getName()
Contraseña de cadena = autenticación.getCredentials().toString();
// Utilice credenciales para probar El sistema de terceros realiza la autenticación if (authenticatedAgainstThirdPartySystem()) {
Listlt; concedidoAuths = new ArrayListlt (); > devolver nuevo UsernamePasswordAuthenticationToken(nombre, contraseña, concedidoAuths) ;
} else {
return null;
}
} p>
@Override
soportes booleanos públicos (Classlt;?gt; autenticación) {
return autenticación.equals(Nombre de usuarioContraseñaAuthenticationToken.class);
}
}
p>Tenga en cuenta que no hay información de autorización en el objeto de autenticación devuelto, porque la información de permiso debe variar de una aplicación a otra.
lwei
Traducido
Hace 2 años
0 personas lo fijaron
arriba ¡Buena traducción!
3. Configuración de seguridad: registrar proveedor de autenticación
Ahora que se ha definido el proveedor de autenticación, debemos especificarlo en la configuración de seguridad XML utilizando el soporte de espacio de nombres disponible:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
lt;?xml versión="1.0" codificación="UTF-8"? beans: beans xmlns="http://www.springframework.org/schema/security"
xmlns: xsi="http://www.w3.org/2001/XMLSchema - instancia" p>
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:sec="http://www.springframework.org/schema/security"
xsi:schemaLocation="
http://www.springframework.org/schema/security
http://www.springframework .org/ esquema /security/spring-security-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org /schema/beans /spring-beans-3.2.xsd"gt;
lt; http use-expressions="true"gt;
...
lt;http -basic/gt;
lt;/httpgt;
lt;authentication-managergt;
lt;authentication-provider ref=" customAuthenticationProvider " /gt;
lt; /authentication-managergt;
lt; /beans: beansgt;
4. No es diferente, ni siquiera necesitas un proveedor de autenticación personalizado.
Hemos establecido una configuración segura usando autenticación básica, por lo que podemos enviar una solicitud de autenticación usando un comando curl simple:
1
2
curl -- header "Aceptar: aplicación/json" -i --user user1.user1Pass
http://localhost:8080/spring-security-custom/api/foo/1
, nosotros Obtuve el resultado deseado de 200 éxitos del servidor:
1
2
3
4
5
6
HTTP/1.1 200 OK
Servidor: Apache-Coyote/1.1
Set-Cookie: JSESSIONID= B8F0EFA81B78DE968088EBB9AFD85A60; =/spring-security-custom/; HttpOnly
Tipo de contenido: application/json; charset=UTF-8
Codificación de transferencia: fragmentado
Fecha : domingo, 2 de junio de 2013 17:50:40 GMT
5. Resumen
En este artículo, analizamos un proveedor de autenticación de muestra personalizado para la seguridad de Spring. La implementación está disponible en el proyecto github; es un proyecto básico de Eclipse, por lo que puede importarlo y ejecutarlo fácilmente.
La reimpresión es solo como referencia. Le deseo una vida feliz y acéptela si está satisfecho.