Idioma: English EspaƱol
Este documento define el contrato cliente semantico para AuthorizationGraph.
El objetivo es hacer las integraciones cliente estables, legibles por negocio y libres de dependencia por defecto de GUID internos.
El contrato cliente canonico actual es el documentado aqui. El schema estructural heredado sigue disponible como referencia en Schema Overview.
Los sistemas cliente deben poder:
validUntil.{
"schemaVersion": "1.0.0",
"graphId": "optional-support-correlation-id",
"context": {
"tenant": {
"code": "TECHNO",
"value": "Techno Logistics",
"status": "ACTIVE",
"isManagementOwner": false
},
"systemSuite": {
"code": "WMS_SUITE",
"value": "Warehouse Management Suite",
"status": "PUBLISHED"
},
"role": {
"code": "WAREHOUSE_SUPERVISOR",
"value": "Warehouse Supervisor",
"hierarchyLevel": 3
},
"profile": {
"scope": "BranchScoped",
"isActive": true
},
"branch": {
"code": "LIM-01",
"value": "Lima Main Branch"
}
},
"authentication": {
"method": "Local",
"provider": {
"code": "AZURE_AD_LOGISTICS",
"value": "Azure AD - Logistics",
"strategy": "AZURE_AD"
},
"mfaRequired": true,
"issuedAt": "2026-06-04T12:00:00Z",
"sessionExpiresAt": "2026-06-04T13:00:00Z"
},
"permissions": [
{
"resourceCode": "INVENTORY",
"actionCode": "VIEW",
"effect": "Allow",
"source": "Template"
}
],
"featureFlags": [
{
"flagCode": "NEW_MENU_EXPERIMENT",
"isEnabled": true
}
],
"effectiveConfig": {
"sessionTimeoutMinutes": 60,
"accessTokenDurationMs": 3600000,
"authUseExternalIdp": false
},
"scopes": [
"INVENTORY.VIEW"
],
"generatedAt": "2026-06-04T12:00:00Z",
"validUntil": "2026-06-04T13:00:00Z"
}
La forma exacta puede llevar secciones semanticas adicionales, pero el contrato cliente por defecto debe permanecer basado en codigos y sin IDs.
tenant.codetenant.valuetenant.statustenant.isManagementOwnersystemSuite.codesystemSuite.valuesystemSuite.statusrole.coderole.valuerole.hierarchyLevelprofile.scopeprofile.isActivebranch.codebranch.valueauthentication.methodauthentication.provider.codeauthentication.provider.valueauthentication.provider.strategyauthentication.mfaRequiredauthentication.issuedAtauthentication.sessionExpiresAtpermissions[].resourceCodepermissions[].actionCodepermissions[].effectpermissions[].sourcefeatureFlags[].flagCodefeatureFlags[].isEnabledeffectiveConfig.sessionTimeoutMinuteseffectiveConfig.accessTokenDurationMseffectiveConfig.authUseExternalIdpscopes[]generatedAtvalidUntilgraphId es opcional y existe para correlacion de soporte, no para logica de autorizacion.Los siguientes campos no deberian formar parte del contrato externo normal:
Si un flujo de soporte necesita un identificador para correlacion, debe usar el modo diagnostico explicito y no el payload por defecto.
El modo diagnostico se reserva para soporte interno y flujos de administracion.
Cuando esta habilitado, puede incluir:
El modo diagnostico nunca debe convertirse en el contrato cliente por defecto.
Triggers recomendados:
includeIds=truemode=diagnosticmode=previewcode y value.Los clientes deben evaluar acceso en este orden:
validUntil.Ejemplo:
function canExecute(graph, resourceCode, actionCode) {
if (new Date(graph.validUntil) <= new Date()) return false;
const deny = graph.permissions.find(
p => p.resourceCode === resourceCode && p.actionCode === actionCode && p.effect === 'Deny'
);
if (deny) return false;
return graph.permissions.some(
p => p.resourceCode === resourceCode && p.actionCode === actionCode && p.effect === 'Allow'
);
}
| Area | Guia |
|---|---|
| Contrato publico | Preferir campos semanticos y codigos estables |
| Modelo interno | Mantener GUIDs dentro de agregados backend y eventos de auditoria |
| SDKs | Deserializar primero los campos semanticos, IDs solo en modo diagnostico |
| Diagnostico | Usar banderas explicitas de soporte para exponer IDs |
| Versionado | schemaVersion debe reflejar la revision del contrato semantico |