- Implemented SvelteKit frontend with authentication callback handling. - Created demo routes and paraglide localization functionality. - Added health check and entrypoint scripts for backend services. - Established PostgreSQL and Keycloak initialization scripts with health checks. - Introduced models for database schema using SQLAlchemy. - Configured Vite and SvelteKit for development and testing environments. - Added health check script to verify service statuses and resource usage. - Created Docker entrypoint scripts for seamless service startup.
5.9 KiB
5.9 KiB
Guía de Configuración de Keycloak para Anexo76
Esta guía te ayudará a configurar Keycloak para usar con Anexo76.
1. Acceder a Keycloak Admin Console
- Abrir http://localhost:8080
- Hacer clic en "Administration Console"
- Login con:
admin/admin
2. Configurar Cliente Backend
Crear Cliente Backend
- En el menú izquierdo, ir a Clients
- Clic en Create client
- Configurar:
- Client ID:
anexo76-backend - Client Protocol:
openid-connect - Clic en Next
- Client ID:
- En la siguiente pantalla:
- Client authentication: ON (Confidential)
- Authorization: OFF
- Authentication flow: Marcar solo "Standard flow" y "Direct access grants"
- Clic en Next
- En "Login settings":
- Root URL:
http://localhost:8000 - Valid redirect URIs:
http://localhost:8000/* - Web origins:
http://localhost:8000 - Clic en Save
- Root URL:
Obtener Client Secret
- Ir a la pestaña Credentials
- Copiar el Client secret
- Agregar al archivo
backend/.env:KEYCLOAK_CLIENT_SECRET=tu-client-secret-aqui
3. Configurar Cliente Frontend
Crear Cliente Frontend
- En Clients, clic en Create client
- Configurar:
- Client ID:
anexo76-frontend - Client Protocol:
openid-connect - Clic en Next
- Client ID:
- En la siguiente pantalla:
- Client authentication: OFF (Public)
- Authorization: OFF
- Authentication flow: Marcar "Standard flow"
- Clic en Next
- En "Login settings":
- Root URL:
http://localhost:5173 - Valid redirect URIs:
http://localhost:5173/*http://localhost:3000/*
- Valid post logout redirect URIs:
http://localhost:5173/*http://localhost:3000/*
- Web origins:
http://localhost:5173http://localhost:3000
- Clic en Save
- Root URL:
4. Crear Usuario de Prueba
Crear Usuario
- En el menú izquierdo, ir a Users
- Clic en Add user
- Configurar:
- Username:
demo - Email:
demo@empresa-demo.com - First name:
Usuario - Last name:
Demo - Email verified: ON
- Clic en Create
- Username:
Establecer Contraseña
- Ir a la pestaña Credentials
- Clic en Set password
- Configurar:
- Password:
demo123 - Password confirmation:
demo123 - Temporary: OFF (para no tener que cambiar la contraseña)
- Password:
- Clic en Save
Agregar Atributo tenant_id
- En el mismo usuario, ir a la pestaña Attributes
- Clic en Add an attribute
- Configurar:
- Key:
tenant_id - Value:
1
- Key:
- Clic en Save
Asignar Roles
- Ir a la pestaña Role mappings
- En "Available roles", buscar y asignar:
admin(si existe)user(si existe)
- Si no existen estos roles, crearlos primero:
- Ir a Realm roles en el menú izquierdo
- Crear roles:
admin,user,auditor,system - Regresar al usuario y asignar roles
5. Configurar Mapper para tenant_id (Opcional pero recomendado)
Para que el tenant_id se incluya automáticamente en el token:
- Ir a Clients →
anexo76-backend - Ir a la pestaña Client scopes
- Clic en
anexo76-backend-dedicated - Ir a la pestaña Mappers
- Clic en Add mapper → By configuration → User Attribute
- Configurar:
- Name:
tenant-id-mapper - User Attribute:
tenant_id - Token Claim Name:
tenant_id - Claim JSON Type:
String - Add to ID token: ON
- Add to access token: ON
- Add to userinfo: ON
- Name:
- Clic en Save
Repetir para el cliente anexo76-frontend si es necesario.
6. Verificar Configuración
Probar desde el Frontend
- Abrir http://localhost:5173
- Hacer clic en "Iniciar Sesión"
- Ingresar credenciales:
- Usuario:
demo - Contraseña:
demo123
- Usuario:
- Deberías ver el dashboard con información del usuario y licencia
Probar desde el API
# Obtener token
curl -X POST http://localhost:8080/realms/master/protocol/openid-connect/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=anexo76-backend" \
-d "client_secret=TU_CLIENT_SECRET" \
-d "username=demo" \
-d "password=demo123" \
-d "grant_type=password"
# Usar el token para llamar al API
curl -X GET http://localhost:8000/v1/auth/me \
-H "Authorization: Bearer TU_ACCESS_TOKEN"
7. Configuración Adicional (Opcional)
Personalizar Tema de Login
- Ir a Realm settings → Themes
- Seleccionar tema de login deseado
- Guardar cambios
Configurar Timeout de Sesión
- Ir a Realm settings → Sessions
- Ajustar:
- SSO Session Idle: Tiempo de inactividad antes de expirar (ej: 30 minutos)
- SSO Session Max: Tiempo máximo de sesión (ej: 10 horas)
- Guardar cambios
Habilitar Registro de Usuarios (Opcional)
- Ir a Realm settings → Login
- Activar User registration
- Guardar cambios
Troubleshooting
Error: "Invalid redirect URI"
- Verificar que las URIs en el cliente coincidan exactamente
- Incluir el protocolo (http:// o https://)
- Incluir el puerto si es necesario
Error: "Client not found"
- Verificar que el Client ID sea exacto
- Verificar que el realm sea correcto
Token no incluye tenant_id
- Verificar que el usuario tenga el atributo configurado
- Verificar que el mapper esté configurado correctamente
- Probar obteniendo un nuevo token
Usuario no puede hacer login
- Verificar que el usuario esté habilitado (User enabled: ON)
- Verificar que el email esté verificado (Email verified: ON)
- Verificar que la contraseña no sea temporal
Próximos Pasos
- Para producción, cambiar el realm de
mastera uno dedicado - Configurar HTTPS/TLS en Keycloak
- Configurar backup de la base de datos de Keycloak
- Implementar políticas de contraseña más estrictas
- Configurar MFA (Multi-Factor Authentication)
¡Listo! Tu configuración de Keycloak está completa para desarrollo.