Skip to main content

Seguridad OAuth 2.0, scopes y gestión de secretos

14.1 Identidad​

  • Identity Provider (IdP): Se reutiliza el proveedor corporativo (actualmente Keycloak en Alpura). Credenciales y scopes por client_id.
  • Flujo sistema-a-sistema: client_credentials.
  • Token: JWT firmado asimétricamente (RS256 o ES256); validación por JWKS endpoint.

14.2 Scopes propuestos​

ScopeUso
nexus.purchase-order.createIngesta OC por partners
nexus.purchase-order.readConsulta de estados
nexus.purchase-order.retryReproceso manual (Operadores)
nexus.validation-rule.readLectura de reglas
nexus.validation-rule.manageCrear/modificar/activar reglas
nexus.configuration.readLectura partners/mappings/config
nexus.configuration.manageGestión de partners y configuración

14.3 Roles RBAC (TBD IdP realm roles)​

RoleScopes mínimos asignados
NEXUS_PARTNER_SYSTEMnexus.purchase-order.create + nexus.purchase-order.read (solo partnerId propio)
NEXUS_OPERATORnexus.purchase-order.read + nexus.purchase-order.retry + nexus.validation-rule.read
NEXUS_ADMINTodos: *.manage + *.read + retry

14.4 Seguridad en APIs​

MedidaImplementación
Autenticación@PreAuthorize("hasAuthority('SCOPE_nexus.purchase-order.create')") en Spring
Autorización por partnerFilter: valida que el partner claim (o una asignación IdP) coincida con X-Partner-Id; si roles superiores, permitir cross-partner.
IdempotenciaX-Idempotency-Key obligatorio + UNIQUE en DB.
Rate limitingAPI Gateway (límites por client/partner).
TLSTerminado en Gateway; mTLS a servicios internos TBD.
SecretosNO hardcodear. Usar Google Secret Manager / HashiCorp Vault TBD. Rotación planificada.
LoggingSiempre borrar PII sensible (tokens, credenciales, payment details).
Auditoríaaudit_event por cada request, cambio de regla y retry manual.

14.5 Token y expiración​

TipoTiempo TBD
access_token (client credentials)5-15 min TBD
refresh_tokenN/A en client credentials
Rotación client secretCada TBD 90 días; soporte para 2 secrets activos simultáneamente (rotation sin downtime).

14.6 Separación por ambientes​

AmbienteRealm / client prefix
Devrealm=Alpura-Dev, client: nexus-*-dev
UATrealm=Alpura-UAT, client: nexus-*-uat
Prodrealm=Alpura, client: nexus-*

Las bases de datos, topics Pub/Sub, vault paths y endpoints Fusion deben separados o con segmentación estricta por ambiente TBD.