OAuth 2.0

OAuth 2.0 (RFC 6749) — фреймворк делегирования доступа. Не путать с аутентификацией — OAuth про "приложение X может действовать от имени юзера в сервисе Y". Аутентификация — это OIDC поверх OAuth.

Роли

Grant types (flows)

GrantДля чегоАктуален?
Authorization Code + PKCEweb + mobile + SPAда, дефолт
Authorization Code (без PKCE)server-side webустарел без PKCE
ImplicitSPAdeprecated
Password (ROPC)legacydeprecated
Client Credentialsmachine-to-machineда
Device Code (RFC 8628)TV, CLIда
Refresh Tokenобновление accessда

Authorization Code Flow (упрощённо)

1. Client → AS:  GET /authorize?client_id=X&redirect_uri=Y&code_challenge=Z
2. Юзер логинится, подтверждает scopes
3. AS → Client: 302 redirect_uri?code=abc
4. Client → AS:  POST /token  code=abc, code_verifier=...
5. AS → Client: {access_token, refresh_token, expires_in}
6. Client → RS:  GET /api  Authorization: Bearer <access_token>

Токены

Scopes

Ограничение доступа: read:profile, write:posts. Юзер видит и подтверждает.

Bearer token — критичный минус

Кто держит токен — тот может юзать. Нет привязки к клиенту. Решение: mTLS (RFC 8705) или DPoP (RFC 9449).

OAuth 2.1 (draft)

Актуализация: PKCE обязателен, Implicit и Password убраны, refresh token rotation обязательна.

См. также