Implementar seguridad en java
seguridad con spring security, tipo de implemntacion
seguridad basica
seguridad jwtoken
seguridad oauth 2.0
Autentificación:
a través de interfaz AutehenticationManager, que implementa patrón estrategia, este puede hacer trsz cosas:
todas las clases que implementan esta interfaz, son formas de autentificar al usuario, la mas utilizada es la que devuelve una cadena de providerManager,
- devolver un Autehentication
- lanzar una excepcion
- devolver null
Autorización
Una vez realizada la autentificación de forma exitosa, se realiza el control de acceso a traves de la interfaz accessDesicionManager , para configurarlos podemos:
- extendiendo la clase webSecurityConfigureAdapter y el uso de antMatchers (patrones de rutas)
- a través de anotaciones @preAuthorize y @PostAuthorize
esta interfaz tiene tres implementaciones, y todas delegan en una cadena de accessDecisionVoter, similar al providerManager
un accessDecisionVoter considera un Authentication y un objeto seguro, el objeto seguro puede representar una web y es decorado con una colección de ConfigAttributes
los ConfigAttributes decoran un objeto con metadatos para eterminar el nivel de permisos, por ejemplo Role_admin o role_audit
interfaces utilizadas mas utilizadas de spring security
webSecurityConfigurerAdapter
*Se extiende en nuestra clase de seguridad
- clase base para configuracion web
- suele venir con @Configuration + @EnableWebSecurity
- Métodos configurar autentificación y autorización
Authentication
- interfaz que extiende de principal
- representa un token para realizar la authenticacion
- normalmente se almacena en el contexto de seguridad (SecurityContext) manejado por el SecurityContextHolder
- Spring Security tiene decenas de clases que lo implementan, por ejemplo UsernamePasswordAuthentificationToken
- Interfaz Nuclear de la autentificación
- Builder para construir un authentificationManager, a travez de:
- LDAP,
- JDBC
- UserDetailService.
- Se suele configurar sobrescribiendo el método configure, de la clase WebSecurityConfigurerAdapter
- interfaz que representa la informacion nuclear de un usuario
- Almacena información que será encapsulada en un objeto de tipo Authentication
- representa un privilegio individual
- se puede usar con perspectiva de grano fino, CAN_READ_SOME_ENTITY_PROPERTY
- también puede representar un Rol con prefijo ROLE_
- la clase que la implementa es SimpleGrantedAuthority
- Interfaz para cargar la informacion del usuario
- Se utiliza como DAO
- Es utilizado por DaoAuthenticationProvider, para obtener los datos del usuario
- Un solo metodo, userDetails LoadUserByUsername(String)
- Se suele utilizar cuando almacenamos la información de los usuarios a través de Spring data y el uso de entidades
- no es un standar de autenticación, es un standar para la creación de tokens de acceso que permite propagar la identidad y privilegios
- no obliga que el servidor maneje la sesión
- son confiables, o sea que no haya sido mutado...esta firmado digitalmente
- Standar abierto para la autentificación de Apis
- permite compartir información entre sitios sin compartir la identidad
- implementa diferentes flujos de autenticación: authorization code flow, resource owner password credential flow, implicit flow.....
- UserEntity
- User
- CreateUserDTO
- GetUserDTO
creamos enumeracion con los roles definidos para la aplicacion
2-Creamos la clase src\main\java\com\openwebinars\rest\users\model\UserEntity.java
Esta clase implementara la interfaz UserDetails
esta clase tiene los campos id (autogenerado) y los campos típicos de una clase que representa una tabla.
- instanciamos a passwordEncoder
- creamos método nuevoUsuario, quien utiliza passworEncoder para cifrar el password del nuevo usuario (método de entrada del tipo userEntity)
- Estandar abierto para autentificar apis, loguearse con un tercero sin dar a conocer nuestra identidad
- distintas formas de loguearse
- Paliar la necesidad del envio continuo de credenciales entre cliente y servidor
- al usuario delega la capacidad de hacer ciertas acciones en su nombre
- al desarrollar una aplicacion no tenemos la necesidad de almacenas username/password
- esta mas orientado al control de acceso (autorizacion)
- Video grant Types
- cuatro roles definidos:
- dueño del recurso
- client
- servidor de recursos protegido
- servidor de autorizacion
- tipos de clientes: dependiendo del tipo de cliente se implementa el flujo de OAuth2, distintas formas de obtener el token-Grant Types
- confidenciales: backend (pueden guardar contraseña)
- publicas: fronend (no pueden guardar contraseña)
Comentarios
Publicar un comentario