time ↓
1User
OWNERApproves scopes at IdP
2Browser
AGENTFront-channel 302 transport
3SPA Client
PUBLICHolds secret code_verifier
4Authorization Server
IDPVerifies S256(verifier)==challenge
5Resource Server
APIEnforces Bearer access token
!Attacker
THREATLacks original code_verifier