OAuth 2.0 can do that—if you run it with privacy by default. Most implementations leave the door open wider than needed. Scopes get over-granted. Tokens last too long. Redirect URIs are loose. Each of these slips leaks data and invites abuse. Privacy by default flips the model: minimal permissions, strict lifetimes, verified endpoints, and fine-grained consent, all built into the initial token flow.
Start with scope minimization. Grant only what is absolutely required for the current action. Limit refresh token validity. Avoid broad wildcard scopes. Use exact redirect URIs, not pattern matches. Require PKCE for public clients to block interception. Enforce TLS everywhere to stop token leakage in transit. Design token expiration to match real usage patterns; short-lived tokens mean less exposure. Integrate audience restrictions so a token can only work with a specific API.
Client registration matters. Identify the app. Verify ownership of redirect URLs. Apply static client secrets where possible and rotate them on schedule. Define standard scopes and block unapproved expansions. Audit consent screens to ensure they show real, clear details about what the user is agreeing to.