Tenant isolation inside a monolithic architecture
The platform was designed as a multi-tenant system within a single ASP.NET Core application. Tenant context was incorporated into authentication, authorization, transaction processing, and data access so multiple business units could share the platform while maintaining clear operational boundaries.
Centralized identity and authorization
Authentication and authorization were centralized through IdentityServer, using OAuth2 and JWT for secure identity propagation. Role-based access control and tenant-aware permissions were handled as platform concerns instead of being implemented independently by each module.
Centralized payment orchestration
Integration with Cybersource was kept behind a controlled transaction flow responsible for request preparation, signing, validation, provider communication, and transaction lifecycle handling. This reduced duplicated integration logic and kept payment behavior easier to maintain.
Transactional consistency over distributed complexity
The architecture prioritized predictable transactional behavior over introducing unnecessary distributed components. Keeping the core payment workflow within one application boundary simplified consistency, validation, and operational support while responsibilities remained separated internally.
Auditability as part of the workflow
Audit logging was incorporated into the payment workflow so relevant transaction and authorization activity could be traced during operational investigation and support.
Operational visibility
Internal dashboards exposed transaction activity and processing state to the teams responsible for operating the platform. The goal was not only to execute payment flows, but also to make their behavior easier to inspect and support.