Permisos Específicos con Authorities en Spring Security
Clase 15 de 23 • Curso de Java Spring Security: Autenticación y Seguridad Web
Contenido del curso
- 5

Configuración de Seguridad con Spring Security y Basic Authentication
06:32 - 6

Funcionamiento del Basic Authentication Filter en Spring Security
11:50 - 7

Deshabilitar protección CSRF en APIs REST con Spring Security
07:28 - 8

Configuración de CORS en Spring Security para APIs y Frontend
12:11 - 9

Configuración de Reglas de Acceso en Spring Security
07:45 - 10

Creación de usuarios personalizados en Spring Security
07:07 - 11

Creación y Gestión de Roles y Permisos en Aplicaciones Web
05:48
- 12

Creación y Gestión de Usuarios en Base de Datos con Spring Security
04:50 - 13

Implementación de User Detail Service en Spring Security con MySQL
09:21 - 14

Asignación de Roles y Permisos en Spring Security
08:57 - 15

Permisos Específicos con Authorities en Spring Security
13:07 - 16

Seguridad de Métodos en Spring Security: Control de Accesos por Roles
06:19
- 17

Creación y Uso de JSON Web Tokens en Java con Auth0
09:05 - 18

Implementación de Autenticación con JSON Web Tokens en Spring Boot
15:45 - 19

Validación de JSON Web Tokens con Auth0 en Java
06:29 - 20

Creación de Filtro de Seguridad JWT en Spring Security
18:16 - 21

Implementación de JSON Web Token en Spring Security
11:58
¿Cómo gestionar permisos en Spring para que los usuarios realicen ciertas acciones?
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.
¿Cuál es la diferencia entre Authorities y Roles?
En Spring Security, las Authorities y Roles aunque a primera vista podrían parecer similares, poseen diferencias cruciales:
- Roles: Son grupos de permisos que un usuario puede tener. Un rol puede agrupar varios permisos, facilitando la gestión de permisos de usuarios que realizan funciones similares.
- Authorities: Son permisos específicos que un usuario puede tener para ejecutar acciones concretas dentro de la aplicación. A diferencia de los roles, son más granulares y permiten asignar permisos muy específicos.
Spring asigna automáticamente el prefijo "ROLE" para diferenciar un rol de una autoridad.
¿Cómo implementar Roles y Authorities en Spring?
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(); }
¿Por qué es crucial el orden de las reglas de seguridad?
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:
- La regla que permita permisos específicos debe estar posicionada antes de reglas más generales. Por ejemplo, permitir a un
authorityespecífico acceder a un endpoint antes de denegar acceso a roles que no cumplan otros criterios.
¿Qué sucede si se comete un error en el orden?
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.