Se entiende como un rol un conjunto de authorities. Es decir, un autority es un permiso puntual mientras un rol un conjunto de permisos.
Un rol puede tener estos permisos de manera conceptual, sin tener que especificar cada authority en el código.
Introducción
Seguridad en aplicaciones web
¿Qué es Spring Security?
Configurar Spring Security
Usar la autenticación por defecto
Configuración de seguridad
Crear configuración inicial de seguridad
¿Cómo funciona el BasicAuthenticationFilter?
Deshabilitar protección CSRF
Crear configuración de CORS
Aplicar requestMatchers
Crear autenticación en memoria
Aplicar requestMatchers con roles
Autenticación con BD
Crear usuarios en la base de datos
Implementar la interface UserDetailsService
Asignar roles a usuario
Aplicar authorities a los usuarios
Controlar métodos con Method Security
Seguridad con JWT
Añadir JWT al proyecto
Crear JWT cuando un usuario inicie sesión
Crear servicio para validar un JWT
Crear filtro para verificar el JWT
Aplicar filtro en la configuración
Próximos pasos
Auditoria de usuarios en la base de datos
¿Quieres un Curso de Microservicios con Java Spring?
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La gestión de permisos en una aplicación es fundamental para garantizar la seguridad y correcta operación de los servicios, especialmente en aplicaciones web donde diferentes usuarios pueden requerir distintos niveles de acceso. En el contexto de aplicaciones Spring, el uso de Authorities
y Roles
es clave para la implementación de esta funcionalidad. Exploremos cómo se utiliza Spring Security para definir permisos específicos que permiten a los usuarios ejecutar determinado tipo de acciones de acuerdo a su rol.
En Spring Security, las Authorities
y Roles
aunque a primera vista podrían parecer similares, poseen diferencias cruciales:
Spring asigna automáticamente el prefijo "ROLE" para diferenciar un rol de una autoridad.
La implementación de roles y autoridades se realiza mediante el uso de clases de seguridad que artículen la creación y asignación de estos permisos. El proceso es el siguiente:
Creación de una Lista de Authorities: Se crea un método privado que retorna una lista de GrantedAuthority
. Este método recibirá roles que tiene el usuario previamente.
private List<GrantedAuthority> grantedAuthorities(String[] roles) {
List<GrantedAuthority> authorities = new ArrayList<>(roles.length);
for (String role : roles) {
authorities.add(new SimpleGrantedAuthority("ROLE_" + role));
}
return authorities;
}
Asignación de Permisos Individuales: Además de roles, se pueden asignar permisos individuales a través de un método que retorne un arreglo de strings con los permisos específicos.
private String[] getAuthorities(String role) {
if ("admin".equals(role) || "customer".equals(role)) {
return new String[]{"randomOrder"};
}
return new String[]{};
}
Configuración de Seguridad: Se deben definir las reglas de seguridad indicando qué roles o autoridades son necesarias para acceder a ciertas rutas.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/orders/random").hasAuthority("randomOrder")
.antMatchers("/api/orders/**").hasRole("admin")
.anyRequest().authenticated();
}
Es vital tener en cuenta el orden en que se evalúan las reglas de seguridad, ya que se ejecutan de forma escalonada. Si una regla general en la lista impide el acceso a un recurso basado en el rol, ninguna otra regla específica de permiso será evaluada después:
authority
específico acceder a un endpoint antes de denegar acceso a roles que no cumplan otros criterios.Al ejecutarse las reglas de seguridad de arriba hacia abajo, un error en el orden puede impedir que un usuario, que debiera tener acceso a una función específica, lo tenga.
Intentar realizar una acción con un usuario con un rol incorrecto resultará en un error del tipo 403 Forbidden, indicando que las credenciales no son suficientes para completar la acción.
Al aplicar estos conceptos, puedes crear usuarios con permisos adaptados a sus necesidades específicas. Usar roles para permiso generales y authorities para quienes necesitan funcionalidades más expresas es una manera eficaz de mejorar la seguridad en tus aplicaciones Spring.
Aportes 8
Preguntas 3
Se entiende como un rol un conjunto de authorities. Es decir, un autority es un permiso puntual mientras un rol un conjunto de permisos.
Un rol puede tener estos permisos de manera conceptual, sin tener que especificar cada authority en el código.
Rol: Acceso a un Modulo(s)
Authorities: Permiso puntual sobre el modulo.
i.e;
El rol Admin tiene acceso al modulo alta de usuarios,
y con los authorities puede crear editar, borrar usuarios.
Un Rol Supervisor, tiene acceso al modulo alta de usuarios, pero con los authorities puede editar solamente usuarios.
Nuevo usuario chef que no esta dentro de la condición para tener el authority “random_order”:
Lo que entendi sobre los roles y authorities, ejemplo:
Rol: “ADMIN” (agrupa varias authorities)
Authority: "CREATE_USER"
Authority: "DELETE_USER"
Authority: “RANDOM_ORDER”
✅
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?