OAuth with SPAs and a Shared BFFGitHub: github.com/mnafshin/oauth What we are building A backend-for-frontend (BFF) that handles OAuth for two single-page apps: React (Vite, port 5173) Angular (port 4200) Both SPAs share one SpJul 5, 2026·7 min read
Identity Providers Are Not the Complete SolutionThe myth "We'll buy Okta / Auth0 / deploy Keycloak — then auth is done." Identity providers (IdPs) and authorization servers solve a specific, hard problem: issuing tokens after authenticating a useJul 4, 2026·5 min read
Authorization Code + PKCEThe one flow to learn first If you implement only one OAuth flow, make it Authorization Code with PKCE (Proof Key for Code Exchange). It works for: Server-side web apps (Spring Boot, Django, Rails) Jul 2, 2026·4 min read
The OAuth Mental ModelFour roles (memorize these) OAuth names four actors. Everything else hangs off them. Role Plain English Example Resource owner User who can grant access Alice Client App requesting access YoJun 30, 2026·4 min read
Why OAuth ExistsThe scenario everyone recognizes Your application wants to access a user's data on another service — their Google Calendar, GitHub repositories, or company files in SharePoint. The naive approach: askJun 30, 2026·4 min read
Stop Inventing Error JSON: A Practical Guide to RFC 7807 Problem DetailsEvery HTTP API eventually returns an error. The hard part is not the status code — it is the body. One service returns { "error": "not found" }, another returns { "message": "User does not exist" }, aJun 29, 2026·10 min read
Idempotency Patterns — Create Orders Exactly Once (With Retries)Git Repo: https://github.com/mnafshin/idempotency Why This Matters Retries are a fact of life in distributed systems. A mobile client times out, a load balancer gives up, a service restarts — and the May 9, 2026·11 min read