Wiki
Безопасность

OAuth 2.0 и OpenID Connect — что это

OAuth 2.0 — стандарт делегирования доступа: даёте приложению права без своего пароля. OpenID Connect — надстройка над OAuth2 для аутентификации (кто вы).

OAuth 2.0 (RFC 6749) — стандарт авторизации: приложение получает ограниченный доступ к вашим данным на другом сервисе без вашего пароля. Классический пример: «Войти через Google» — GitHub не видит ваш google-пароль, но получает access-token с scope'ами (например, `read:email`, `write:repo`).

OAuth сам по себе не отвечает на вопрос «кто пользователь» — только «этому приложению разрешено делать X». Для аутентификации поверх него стандартизировали OpenID Connect (OIDC) — расширение OAuth2, добавляющее `id_token` (JWT с claims: sub, email, name, picture). Google, Microsoft, Apple, Auth0, Okta, Keycloak — все реализуют OIDC.

Flow: Authorization Code + PKCE — современный дефолт для веб- и мобильных приложений. (1) Приложение редиректит пользователя на IdP (Google) со scope'ами. (2) Пользователь логинится, соглашается. (3) IdP возвращает `authorization_code` в редирект. (4) Приложение обменивает код + PKCE-verifier на `access_token` и `id_token` через backend-канал. (5) Валидируется JWT-подпись id_token — теперь знаете, кто пользователь.

Опасно: (1) implicit flow (устарел) — токен в URL fragment, попадает в логи браузера. (2) не проверять `iss` / `aud` / `exp` в id_token — принять фальшивый токен. (3) redirect_uri без wildcarcd whitelist — атака redirect. (4) не PKCE в SPA/mobile — украденный код используется атакующим.

Частые вопросы

OAuth2 vs OIDC — когда что?
Нужен только API-доступ (GitHub API от твоего app'a) — OAuth2. Нужна аутентификация пользователя (Sign in with Google) — OIDC.
SAML или OIDC?
SAML — legacy enterprise (SSO для внутренних Windows-корпораций). OIDC — modern web/mobile, JSON вместо XML.

Смотрите также