orquestador/specs/POC_AUTH.md

74 lines
3.6 KiB
Markdown

# Autenticación de la POC sin Keycloak
El perfil explícito `demo-token` usa un token fijo en `Authorization: Bearer ...`.
No necesita un JWT, issuer, audiencia ni JWKS de Keycloak. El resto de las rutas
sigue protegido; sin token o con un valor incorrecto responde 401.
El override `compose.mock.yaml` activa `postgres96,demo-mock,demo-token` por defecto.
Para usarlo basta el `MOCK_ADMIN_TOKEN` existente (al menos 32 caracteres base64url:
letras, números, guion o guion bajo). Compose lo reutiliza como token del
orquestador si no defines `ORCHESTRATOR_DEMO_TOKEN`.
Opcionalmente, separar tokens en `.env`:
```dotenv
# Sustituir por un token aleatorio de 32 a 256 caracteres base64url.
ORCHESTRATOR_DEMO_TOKEN=
ORCHESTRATOR_DEMO_SUBJECT=poc-user
ORCHESTRATOR_DEMO_SCOPE=demo
ADMIN_BUSINESS_SCOPES=demo
```
Un valor vacío de ORCHESTRATOR_DEMO_TOKEN en Compose usa MOCK_ADMIN_TOKEN. Al
arrancar directamente con Java y demo-token, ORCHESTRATOR_DEMO_TOKEN es obligatorio.
No guardar tokens reales en el repositorio ni en las colecciones exportadas.
Aplicar la configuración y reconstruir el servicio:
```bash
docker compose -f compose.yaml -f compose.mock.yaml up -d --build orquestador
docker compose -f compose.yaml -f compose.mock.yaml exec orquestador printenv SPRING_PROFILES_ACTIVE
```
En la colección Postman **Orquestador NMP**, establecer `accessToken` con ese
token fijo, sin escribir Bearer. Dejar vacíos `editorToken`, `publisherToken`,
`adminToken` y `operatorToken` para que reutilicen accessToken. Borrar valores
antiguos de esos campos y de variables de entorno de Postman que los sobrescriban.
La colección del mock mantiene `mockAdminToken=MOCK_ADMIN_TOKEN`.
## Identidad y permisos
El servidor asocia el token a `poc-user`, ámbito `demo`, y roles ANALISTA,
FLOW_EDITOR, FLOW_PUBLISHER, FLOW_ADMIN y EXECUTION_OPERATOR. Subject y ámbito
se pueden configurar con las variables indicadas; roles fijos para la demo.
El cliente no puede escoger identidad/roles mediante el cuerpo o cabeceras.
Todas las personas que usen el mismo token son el mismo usuario de POC. Las
solicitudes creadas con otro subject o ámbito (incluido el usuario previo de
Keycloak) no se vuelven accesibles automáticamente. Cambiar el token conservando
subject y ámbito permite seguir trabajando con las solicitudes de la POC.
Se conservan las comprobaciones de propiedad, ámbito, roles, If-Match,
idempotencia y el rol restringido de PostgreSQL. La administración exige que
ADMIN_BUSINESS_SCOPES incluya el ámbito configurado. Un valor previo en `.env`
no se reemplaza automáticamente por demo.
FLOW_ADMIN_ENABLED, REQUEST_API_ENABLED y WORKER_ENABLED siguen siendo
interruptores independientes. Para el recorrido completo habilitarlos y usar
credenciales DB de runtime restringidas y migración separadas según SECURITY.md.
El token no crea tipos, flujos ni solicitudes y no evita esa comprobación DB.
## Modo normal
Sin `demo-token`, continúa la validación RS256, issuer, audiencia, expiración y
claims del JWT. JWT_ISSUER_URI, JWT_JWK_SET_URI y JWT_AUDIENCE son obligatorios
al arrancar la aplicación en modo normal, aunque Compose permita valores vacíos
para poder combinarlo con el override de POC. Configurar un token fijo sin
activar el perfil no habilita este modo.
Internamente se adapta la identidad a la representación usada por los
controladores existentes. No se firma un JWT ni se confía en claims proporcionados
por el cliente; únicamente se compara el secreto configurado. No hay caducidad
automática del token fijo: rotarlo requiere recrear el servicio. Esta POC usa
HTTP sin cifrado conforme a la configuración de demo solicitada.