Multi-org consortiums; X.509 certificate hierarchy with CertificateAuthority
Every entity must be registered and have its identity validated before being permitted to call PolicyEngine (Policy Enforcement) or submit events (Event Submission).
Flow Diagram — Entity Onboarding (Enterprise MSP)
sequenceDiagram
autonumber
participant Admin as 🏢 Enterprise Admin
participant MSP as 🏛️ HierarchicalMSP
participant CA as 📜 CertificateAuthority
participant PE as ⚖️ PolicyEngine (Policy Enforcement)
rect rgb(0, 0, 0, 0)
Note over Admin: Phase 1 — Define roles
Admin->>MSP: define_role(role_name, permissions, policy_ids)
MSP->>MSP: OrganizationPolicies.assign_role_permissions(role, perms)
end
rect rgb(0, 0, 0, 0)
Note over Admin: Phase 2 — Register entity
Admin->>MSP: register_entity(entity_id, credentials, role, attributes)
MSP->>CA: issue_certificate(entity_id, public_key, attributes, valid_days)
CA->>CA: _generate_cert_id(entity_id, public_key)
CA->>CA: _sign_certificate(cert_id, subject, public_key, ca_key)
CA-->>MSP: Certificate { cert_id, valid_until, status=ACTIVE }
MSP->>MSP: entities[entity_id] = { certificate, role, status: active }
MSP-->>Admin: True ✅
end
Flow Diagram — Runtime Authorization
sequenceDiagram
autonumber
participant Caller as 🖥️ API Client
participant MSP as 🏛️ HierarchicalMSP
participant CA as 📜 CertificateAuthority
participant PE as ⚖️ PolicyEngine (Policy Enforcement)
rect rgb(0, 0, 0, 0)
Note over Caller,CA: Phase 1 — Validate Identity
Caller->>MSP: validate_identity(entity_id, credentials)
MSP->>CA: verify_certificate(cert_id)
CA->>CA: Check: cert not revoked AND is_valid() (within time window)
CA-->>MSP: True / False
MSP->>MSP: Match credentials.public_key vs stored certificate
MSP-->>Caller: True ✅ (identity confirmed)
end
rect rgb(0, 0, 0, 0)
Note over Caller,PE: Phase 2 — Authorize Action
Caller->>MSP: authorize_action(entity_id, action, resource)
MSP->>MSP: check_permission(role, action)
MSP->>MSP: evaluate_policy(policy_id, context) for each role policy
MSP-->>Caller: True / False
end
alt Action authorized
Caller->>PE: evaluate_policy(policy_id, context_with_role)
Note right of PE: Policy Enforcement flow continues here
end
Flow Diagram — Certificate Revocation
sequenceDiagram
autonumber
participant Admin as 🏢 Enterprise Admin
participant MSP as 🏛️ HierarchicalMSP
participant CA as 📜 CertificateAuthority
Admin->>MSP: revoke_entity(entity_id, reason)
MSP->>CA: revoke_certificate(cert_id, reason)
CA->>CA: revoked_certificates.add(cert_id)
CA->>CA: cert.status = REVOKED
MSP->>MSP: entity[status] = revoked
MSP-->>Admin: True ✅
Note over CA: All future validate_identity() calls for this entity<br/>will fail at CA.verify_certificate()