PKCE (Proof Key for Code Exchange) closes a known attack on public OAuth clients. Client
generates a random code_verifier, computes code_challenge = SHA256(verifier).
Authorization server stores the challenge. On token exchange, client sends verifier; server checks
SHA256(verifier) == challenge.
This binds the auth code to the legitimate client. An attacker who intercepts the code can't exchange it without the verifier. Standard for mobile apps, SPAs, CLI tools.