OAuth 2.0: Delegated Authorization

OAuth solved a specific, once-terrible problem: how does an app access your data on another service without you handing over your password? Its answer — a scoped, revocable token granted through a trusted intermediary — is elegant, but only if you remember what OAuth actually is. It's authorization, not login, and everything about it makes sense once you hold that firmly.

The last post placed OAuth 2.0 as the authorization answer to “what are you allowed to do?” This post explains the framework itself: the problem it solves, its four roles, and how a delegated grant works at a high level. OAuth is the foundation the rest of the series builds on — OIDC sits on top of it, and tokens flow through it — so understanding its structure and purpose is essential.

The problem OAuth solves

Before OAuth, if a third-party app wanted to access your data on another service — say, a printing app wanting your cloud photos — the only way was to give the app your password to that service. This was catastrophic:

OAuth 2.0 was designed to end this “password anti-pattern.” Its core idea: delegated authorization — let you grant an app limited, revocable permission to access specific resources on your behalf, without ever sharing your password. The app gets a token representing that scoped permission, not your credentials. This is the whole point of OAuth, and it’s why it’s an authorization framework: it’s about granting access to resources, not about proving who you are.

The four roles

OAuth defines four roles, and naming them precisely dissolves most confusion, because every step of every flow is an interaction between them:

  Resource Owner (you)
        │ grants permission
        ▼
  Client (the app)  ──asks──▶  Authorization Server  ──issues token──▶ Client
        │                          (authenticates you, gets consent)
        │ uses token
        ▼
  Resource Server (the API) ──serves the scoped resource──▶ Client

The elegance: the client never sees your password. You authenticate directly to the authorization server, approve a specific scope of access, and the client receives only a token. The client uses that token against the resource server. Your credentials stay between you and the authorization server.

Scopes: limited permission

The “limited” in “limited permission” is expressed through scopes — named permissions the client requests and you approve. A client asks for specific scopes (photos.read, not account.full), and you see and consent to exactly what you’re granting:

Scopes are how OAuth delivers limited delegation instead of all-or-nothing access — the direct fix for the old “give the app your password (and thus everything)” problem. Request the minimum scopes you need; over-requesting scares users and violates least privilege.

Revocable, not permanent

The other half of the fix is revocability. Because the client holds a token rather than your password, that token can be revoked — by you (removing the app’s access in your account settings) or by the authorization server — without affecting your password or other apps. This is impossible with the password anti-pattern (revoking meant changing your password and breaking everything). Tokens can also expire (a later post on tokens), so access is naturally time-bounded. Delegated access that’s scoped and revocable and expiring is the security model OAuth exists to provide.

What OAuth is NOT

Because it’s so widely used, it’s worth stating plainly what OAuth 2.0 is not, reinforcing the last post:

Holding “OAuth = delegated authorization, via scoped revocable tokens, through an authorization server, without sharing the password” firmly is what keeps everything downstream straight. The next post opens up how the client actually obtains a token — the OAuth flows — where the security-critical details live.

Key takeaways

Further reading

Sources & References

The OAuth 2.0 specification