OAuth 2.1: что изменилось и почему это важно

OAuth 2.1 консолидирует лучшие практики безопасности последних лет. Разбираем ключевые отличия от OAuth 2.0 и что нужно обновить в вашем приложении.

Что такое OAuth 2.1

OAuth 2.1 — это не новый протокол, а обновлённая спецификация, которая объединяет OAuth 2.0 и все накопленные за годы best practices безопасности в один документ.

Если вы используете OAuth 2.0 по современным рекомендациям, переход будет минимальным. Если нет — статья покажет где проблемы.

Главные изменения

1. PKCE обязателен для всех

В OAuth 2.0 PKCE (Proof Key for Code Exchange) был опциональным расширением для мобильных приложений. В OAuth 2.1 он обязателен для всех клиентов, включая серверные.

PKCE защищает от перехвата authorization code. Без него злоумышленник, перехвативший code, может получить токен.

# Клиент генерирует:
code_verifier = random_string(43-128 chars)
code_challenge = BASE64URL(SHA256(code_verifier))

# В запросе к /authorize:
?code_challenge=...&code_challenge_method=S256

# В запросе к /token:
&code_verifier=...

2. Implicit flow удалён

Implicit flow возвращал access_token прямо в redirect URI (в URL fragment). Это создавало риски:

Замена: Authorization Code Flow + PKCE работает и в SPA, и в мобильных приложениях.

3. Resource Owner Password Credentials удалён

ROPC flow передавал логин и пароль пользователя напрямую клиенту. Это нарушает главный принцип OAuth — пользователь не должен доверять пароль приложению.

Замена: Device Authorization Grant для устройств без браузера.

4. Refresh token rotation

При каждом использовании refresh token сервер выдаёт новый и инвалидирует старый. Если старый токен используется повторно — это признак утечки, и все токены сессии аннулируются.

Что нужно обновить

Если вы поддерживаете OAuth 2.0 сервер:

  1. Добавить обязательную валидацию PKCE для Authorization Code Flow
  2. Отключить Implicit и ROPC endpoints
  3. Внедрить refresh token rotation
  4. Проверить что Bearer tokens не принимаются в URL query parameters

Versola и OAuth 2.1

Versola реализует OAuth 2.1 и OpenID Connect с первого дня. PKCE обязателен, Implicit flow отсутствует, refresh token rotation включён по умолчанию.