|
|
# Sistema de Acceso con Roles y Pruebas de Integración con Keycloak
|
|
|
|
|
|
## 1. Introducción
|
|
|
El sistema de acceso y autenticación es un componente esencial en cualquier aplicación web, ya que garantiza la seguridad y control de los usuarios dentro del sistema. Para el desarrollo del sistema actual en **RedwoodJS**, se han explorado distintas opciones de autenticación y autorización, considerando tanto **dbAuth** (método local) como **Keycloak** (solución centralizada y escalable).
|
|
|
|
|
|
Además, se evaluó una posible integración con **Ciudadanía Digital**, un servicio de autenticación que podría facilitar el acceso a usuarios gubernamentales en Bolivia.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 2. Autenticación Local con dbAuth en RedwoodJS
|
|
|
RedwoodJS ofrece **dbAuth**, un sistema de autenticación que maneja credenciales de usuario en la base de datos local. Se decidió implementar inicialmente esta opción por su facilidad de uso y rápida integración en el sistema.
|
|
|
|
|
|
### **Ventajas de dbAuth**
|
|
|
- ✔️ Simplicidad y rapidez en la implementación.
|
|
|
- ✔️ No requiere dependencias externas.
|
|
|
- ✔️ Control total sobre la autenticación y la base de datos.
|
|
|
|
|
|
### **Desventajas de dbAuth**
|
|
|
- ❌ No es una solución escalable para múltiples aplicaciones.
|
|
|
- ❌ La gestión de usuarios y permisos debe manejarse manualmente.
|
|
|
- ❌ No proporciona soporte para autenticación federada (OAuth, OpenID, etc.).
|
|
|
|
|
|
---
|
|
|
|
|
|
## 3. Investigación sobre Keycloak
|
|
|
Dado que el sistema crecerá y necesitará una administración centralizada de usuarios y roles, se exploró **Keycloak**, una solución de código abierto para la autenticación y autorización basada en estándares como **OAuth 2.0, OpenID Connect y SAML**.
|
|
|
|
|
|
### **Beneficios de usar Keycloak en el sistema**
|
|
|
|
|
|
1. **Centralización de Usuarios y Roles**
|
|
|
- Un único lugar para gestionar usuarios, permisos y roles.
|
|
|
- Posibilidad de definir **roles globales y específicos por aplicación**.
|
|
|
|
|
|
2. **Soporte para Múltiples Métodos de Autenticación**
|
|
|
- Inicio de sesión con redes sociales (**Google, Facebook, etc.**).
|
|
|
- Integración con **LDAP y Active Directory** para entornos empresariales.
|
|
|
- Autenticación multifactor (**MFA**).
|
|
|
|
|
|
3. **Integración con RedwoodJS**
|
|
|
- Uso de **JWT (JSON Web Tokens)** para validar usuarios en el frontend y backend.
|
|
|
- Manejo seguro de sesiones con **OAuth 2.0** y **Refresh Tokens**.
|
|
|
|
|
|
### **Desventajas y Desafíos**
|
|
|
- 🔹 Requiere configuración inicial avanzada.
|
|
|
- 🔹 Necesita un servidor Keycloak en producción.
|
|
|
- 🔹 Mayor curva de aprendizaje que dbAuth.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 4. Pruebas de Integración de Keycloak con RedwoodJS
|
|
|
Para validar la integración con Keycloak, se realizaron pruebas utilizando un servidor local de Keycloak y configurando RedwoodJS para autenticar usuarios a través de OAuth.
|
|
|
|
|
|
### **Pasos de Integración con RedwoodJS**
|
|
|
|
|
|
1. **Instalar Keycloak y crear un realm**
|
|
|
```bash
|
|
|
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak start-dev
|
|
|
```
|
|
|
2. **Configurar un cliente en Keycloak**
|
|
|
- Definir **redirect URIs**: `http://localhost:8910/*`
|
|
|
- Configurar la aplicación en modo **confidential** para seguridad.
|
|
|
- Generar un **client secret**.
|
|
|
|
|
|
3. **Modificar RedwoodJS para aceptar tokens de Keycloak**
|
|
|
```javascript
|
|
|
import { AuthenticationClient } from 'keycloak-js';
|
|
|
|
|
|
const keycloak = new AuthenticationClient({
|
|
|
url: 'http://localhost:8080',
|
|
|
realm: 'mi-realm',
|
|
|
clientId: 'mi-app',
|
|
|
});
|
|
|
|
|
|
export default keycloak;
|
|
|
```
|
|
|
|
|
|
4. **Pruebas de autenticación con roles**
|
|
|
- Se probó con **usuarios administradores y usuarios estándar**.
|
|
|
- Se validó la autenticación y el acceso a rutas protegidas.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 5. Integración con Ciudadanía Digital
|
|
|
**Ciudadanía Digital** es un servicio de autenticación del gobierno de Bolivia, que permite a los ciudadanos acceder a múltiples servicios públicos con un solo usuario. Se investigó la posibilidad de integrarlo con **Keycloak** para que los usuarios puedan autenticarse con sus credenciales gubernamentales.
|
|
|
|
|
|
### **Beneficios de Integrar Ciudadanía Digital**
|
|
|
|
|
|
✅ **Facilita el acceso**: Los usuarios gubernamentales no necesitan cuentas adicionales.
|
|
|
✅ **Mayor seguridad**: Usa un sistema validado por el gobierno.
|
|
|
✅ **Interoperabilidad**: Se puede reutilizar el mismo sistema en diferentes plataformas del sector público.
|
|
|
|
|
|
### **Pasos para la Integración**
|
|
|
|
|
|
1. **Registrar la aplicación en Ciudadanía Digital** para obtener credenciales de API.
|
|
|
2. **Configurar Keycloak como Identity Broker** para aceptar autenticación desde Ciudadanía Digital.
|
|
|
3. **Probar la autenticación en RedwoodJS** asegurando que los tokens sean válidos.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 6. Comparación de Métodos de Autenticación
|
|
|
|
|
|
| Método | Simplicidad | Seguridad | Escalabilidad | Integración con otros servicios |
|
|
|
|----------------------|------------|-----------|---------------|---------------------------------|
|
|
|
| dbAuth (Local) | Alta | Media | Baja | No |
|
|
|
| Keycloak | Media | Alta | Alta | Sí (OAuth, OpenID, LDAP) |
|
|
|
| Ciudadanía Digital | Baja | Alta | Alta | Sí (Sector público) |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 7. Conclusiones y Próximos Pasos
|
|
|
La evaluación de **dbAuth, Keycloak y Ciudadanía Digital** permitió identificar las mejores soluciones para el sistema.
|
|
|
|
|
|
- 🔹 **En la primera fase, dbAuth es suficiente**, pero para futuras versiones, **Keycloak es la mejor opción** por su capacidad de gestión centralizada.
|
|
|
- 🔹 **Ciudadanía Digital puede ser una integración clave** si el sistema se adopta en entornos gubernamentales.
|
|
|
- 🔹 **Próximos pasos**: Implementar una **prueba piloto con Keycloak** y explorar la integración con **Ciudadanía Digital** en un entorno controlado.
|
|
|
|