- Added data table component for displaying clients and providers with infinite scroll functionality. - Created dropdown actions for each client/provider including copy ID, copy RFC, view details, edit, toggle status, and delete. - Implemented dialogs for creating, editing, viewing details, and deleting clients/providers. - Integrated API calls for fetching, creating, editing, deleting, and toggling status of clients/providers. - Enhanced error handling and loading states for better user experience. - Updated server-side logic to handle pagination and company selection for client/provider data retrieval.
6.2 KiB
6.2 KiB
Guía de Configuración de Keycloak para Anexo76
Esta guía te ayudará a configurar Keycloak para usar con Anexo76.
Script auto initialize
Te genera toda la configruracion inicial de keycloack que se ve en este documento, aparte de esto te genera un primer usuario configurado con su tenant y una company
scripts/init_first_time.sh
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.