What OIDC adds on top of OAuth
Five things, in order of importance:
- ID Token — a signed JWT with claims about who the user is (`sub`, `email`, `name`, `aud`, `iss`, `exp`). This is what makes "Sign in with X" work — the relying party can verify the signature and trust the claims without calling back to the IdP.
- `openid` scope — adds OIDC behavior to a standard OAuth /authorize call. If you ask for `openid profile email`, the response includes an ID Token; if you don't include `openid`, it doesn't.
- Standard claims — `sub`, `name`, `email`, `email_verified`, `picture`, `locale`, etc. RPs can rely on the same claim names across IdPs.
- UserInfo endpoint — returns the same claims as the ID Token, but as a regular HTTP endpoint requiring the access token. Useful when the ID Token has been narrowed for privacy.
- Discovery (well-known) — `/.well-known/openid-configuration` returns a JSON document with all the IdP's endpoints, supported scopes, supported algorithms, and JWKS URI. The RP can configure itself.
