Configuración de Reglas de Acceso en Spring Security
Clase 9 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 se configuran las reglas de seguridad en Spring Security?
Spring Security nos permite definir reglas de seguridad para denegar o permitir el acceso a diferentes endpoints o métodos HTTP. Al configurar estas reglas, podemos proteger rutas específicas en nuestra aplicación según las necesidades del proyecto. Utilizaremos request matchers para establecer estas reglas, una manera flexible de aplicar criterios de seguridad personalizados.
¿Qué son los request matchers?
Los request matchers son criterios que utilizamos para definir las reglas de acceso a nuestros endpoints. Esto se puede hacer especificando:
- El path o patrón: Una ruta específica o patrón sobre el cual aplicar la regla.
- El método HTTP: Combinado con un path, permite definir reglas para métodos específicos como GET, POST, etc.
Por ejemplo, podemos crear una regla que permita todos los métodos GET en rutas que sigan el patrón /api/*.
¿Cómo configurar y lanzar una aplicación con reglas de acceso específicas?
Al establecer reglas, es importante definir claramente las acciones sobre ellas. Podemos permitir, denegar o requerir roles específicos. Por simplicidad, mencionaremos cómo permitir acceso a ciertos métodos.
Ejemplo básico
A continuación, presentamos un ejemplo de configuración básica permitiendo todos los métodos GET en cualquier ruta que comience con /api/ seguido de cualquier subruta:
http.authorizeHttpRequests()
.requestMatchers(HttpMethod.GET, "/api/*")
.permitAll();
Este fragmento de código indica que todas las peticiones GET a rutas bajo /api/ están permitidas. Si lanzamos la aplicación y probamos estas rutas usando herramientas como Postman, podemos ver una diferencia clara en el acceso permitido.
¿Qué diferencia existe entre un asterisco y dos en los patrones?
El uso de un solo asterisco (*) en las rutas permite el acceso solo al siguiente nivel del path. Por ejemplo, /api/* permite acceso al primer nivel después de /api/. Así, una ruta /api/pizzas funcionará, pero /api/pizzas/available requerirá una configuración adicional.
Por otro lado, utilizar dos asteriscos ()** expande la autorización a cualquier subruta en todo el árbol después del sufijo indicado. Modifiquemos nuestro ejemplo previo:
http.authorizeHttpRequests()
.requestMatchers(HttpMethod.GET, "/api/**")
.permitAll();
Esto permite acceder a cualquier ruta bajo /api/ sin restricciones adicionales.
¿Cómo aplicamos reglas más específicas?
Podemos designar reglas para rutas específicas restringiendo el acceso a otras. Por ejemplo, si queremos que solo esté permitido el acceso a /api/pizzas:
http.authorizeHttpRequests()
.requestMatchers(HttpMethod.GET, "/api/pizzas")
.permitAll()
.anyRequest()
.authenticated();
Con esto, cualquier otra petición, por ejemplo, /api/orders, requerirá autenticación.
¿Cómo podemos denegar acceso a ciertos métodos?
Es posible bloquear completamente un método HTTP en toda la aplicación. Supongamos que las reglas de negocio prohíben el uso del método PUT en todo el proyecto:
http.authorizeHttpRequests()
.requestMatchers(HttpMethod.PUT)
.denyAll();
Esto denegará cualquier intento de uso del método PUT, sin importar la autenticación del usuario.
Consejos prácticos para implementar reglas en Spring Security
- Planifica tus reglas: Asegúrate de que las rutas críticas y sensibles estén protegidas antes de lanzar tu aplicación.
- Prueba exhaustivamente: Usa herramientas como Postman para verificar que la configuración de seguridad funcione como esperabas.
- Considera roles de usuario: Aunque este ejemplo no cubre roles, piénsalo para una mayor granularidad en accesos.
Seguir estos consejos te ayudará a mantener una aplicación segura, y te animamos a seguir profundizando en la seguridad de Spring Security. ¡No te detengas aquí! El futuro del desarrollo seguro depende de seguir aprendiendo y aplicando estas prácticas.