Estado: Aceptado
Fecha: 2026-06-03
Responsable: Arquitectura
Relacionados:
El portal UMS necesita que los administradores puedan previsualizar el auth graph para un perfil dado sin emitir una solicitud de autenticación real. Esto es necesario para:
El enfoque naive sería un constructor de grafo separado y simplificado para la previsualización. Sin embargo, tener dos constructores independientes significa que el preview puede divergir de la salida real, lo que anula su propósito diagnóstico.
IAuthorizationGraphBuilderEl endpoint interno de preview GET /api/v1/profiles/{id}/auth-graph/preview llama a PreviewProfileAuthGraphCommandHandler, que usa la misma inyección de IAuthorizationGraphBuilder que el flujo externo POST /api/v1/client/authenticate.
Existe un solo pipeline de construcción del grafo. El preview se distingue de la autenticación real únicamente por:
| Aspecto | Auth externo (POST /client/authenticate) |
Preview interno (GET /profiles/{id}/auth-graph/preview) |
|---|---|---|
| Validación de credenciales | Sí — resuelve y valida credenciales | Omitida — el perfil se busca directamente por ID |
| Resolución del método de auth | Sí | No necesaria — el perfil ya existe |
| Evento de auditoría | Auth.Success / Auth.Failure |
Graph.Preview.Internal |
| Cabeceras de respuesta | — | X-Preview-Mode: internal-preview, X-Request-Id |
| Control de acceso | Público (basado en token) | Requiere sesión de portal autenticada (IUserContext.IsAuthenticated) |
IAuthGraphFormatProvider y IFactory<..., IAuthorizationGraphSerializer>).?format= — misma lógica que el endpoint externo.tenantId, tenantCode, authMethodUsed) propagados desde el perfil.requestId en la respuesta para trazabilidad.GET /api/v1/profiles/{profileId:guid}/auth-graph/preview[?format=JSON|CBOR|...]
Autorización: cabeceras X-User-Id / X-Tenant-Id (sesión del portal)
Respuesta:
{
"format": "JSON",
"graph": { ... },
"requestId": "...",
"previewMode": "internal-preview",
"profileId": "...",
"userId": "...",
"tenantId": "...",
"tenantCode": "...",
"authMethodUsed": "..."
}