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). Это создавало риски:
- Токен попадал в browser history
- Токен мог утечь через Referer header
- Нельзя выдать refresh token
Замена: 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 сервер:
- Добавить обязательную валидацию PKCE для Authorization Code Flow
- Отключить Implicit и ROPC endpoints
- Внедрить refresh token rotation
- Проверить что Bearer tokens не принимаются в URL query parameters
Versola и OAuth 2.1
Versola реализует OAuth 2.1 и OpenID Connect с первого дня. PKCE обязателен, Implicit flow отсутствует, refresh token rotation включён по умолчанию.