A console banking app demonstrating how Identity Providers and raw SQL work under the hood
A console-based bank application built to demonstrate how modern enterprise systems handle authentication and authorization. It uses two separate SQLite databases: an Identity Provider (IDP) and a Bank App database, mirroring the architecture of real-world banking systems.
The IDP manages users, roles, claims, OAuth clients and authorization codes, while the Bank database handles accounts, transactions, transfers and logs. Users authenticate via OpenID Connect — the bank application exchanges authorization codes for identity tokens issued by the IDP to grant access.
All database interactions are performed through raw SQL queries, with no ORM abstractions, highlighting how applications communicate with databases at the lowest level. Users can register, log in, manage bank accounts, perform deposits, withdrawals and transfers, and check their balance and activity logs.
This project highlights the details abstracted by authentication/authorization frameworks, by exposing how an IDP works. It also highlights database and sql operations
abstracted by ORMS. This was built as my final project for the course CS50'Sql By Harvard University.
Built with .NET 9 (C#), SQLite, using the micro-orm Dapper to execute raw SQL Queries.
November 2025 - November 2025