Autorización
Decidir quién tiene derecho a hacer qué, sin dejar ninguna puerta entreabierta.
Autorización y control de acceso
La autenticación es un problema resuelto: existe una buena respuesta, y Spring Security la proporciona. La autorización, en cambio, es un problema de diseño, y ahí es donde se esconden los fallos interesantes. Un atacante no necesita romper su hash BCrypt si puede consultar la factura de otro cliente cambiando un identificador en la URL. OWASP sitúa este tipo de defecto —el control de acceso defectuoso— a la cabeza de su clasificación de riesgos.
Estos defectos comparten una característica: no provocan ningún error. Una regla de autorización demasiado amplia no falla; autoriza. Una regla colocada detrás de otra que la absorbe no avisa de nada; simplemente se ignora. Una anotación @PreAuthorize sobre un método invocado desde la misma clase no se aplica; la llamada se realiza con éxito. En los tres casos, las pruebas funcionales pasan, la demostración sale bien y el acceso queda abierto.
Esta lección trata la autorización en dos niveles. A nivel de URL, con authorizeHttpRequests, que protege la entrada del edificio. A nivel de método, con @PreAuthorize, que protege cada estancia y que, además, es la única que permite responder a la pregunta «¿esta factura pertenece realmente a quien la solicita?», una pregunta que una regla de URL es estructuralmente incapaz de resolver.
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión