senior
Как работает OAuth 2.1 и JWT в микросервисной архитектуре?
OAuth 2.1 — упрощённая и более безопасная версия OAuth 2.0, в которой обязателен PKCE для всех клиентов, запрещены implicit flow и password grant.
JWT vs Opaque Tokens
| Критерий | JWT | Opaque Token |
|---|---|---|
| Валидация | Локально (по подписи) | Запрос к Authorization Server |
| Размер | Большой (payload в токене) | Маленький (ссылка) |
| Отзыв | Сложно (blacklist / short TTL) | Легко (удалить на сервере) |
| Информация | Содержит claims | Только идентификатор |
| Подходит для | Микросервисов (нет доп. запросов) | Монолитов с требованиями к безопасности |
Рекомендация: JWT для межсервисного взаимодействия, короткий TTL (5-15 минут), refresh token для обновления.
Keycloak как Identity Provider
Пример
# docker-compose.yml (dev-окружение)
services:
keycloak:
image: quay.io/keycloak/keycloak:26.0
command: start-dev
ports:
- "8180:8080"
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://postgres:5432/keycloak
Конфигурация Resource Server
Пример
spring:
security:
oauth2:
resourceserver:
jwt:
issuer-uri: https://keycloak.example.com/realms/my-app
jwk-set-uri: https://keycloak.example.com/realms/my-app/protocol/openid-connect/certs
Частые ошибки
- Длинный TTL для access token (часы, дни). Рекомендация: 5-15 минут
- Отсутствие PKCE для public клиентов
- Хранение секретов в коде или конфигурационных файлах
Как используется в 2026
Keycloak остаётся лидером среди open-source Identity Provider. OAuth 2.1 формально стандартизирован. Spring Authorization Server зрелый продукт для случаев, когда нужен собственный Authorization Server.
На собеседовании: ключевой вопрос senior-уровня: “Как отзывать JWT?” Правильный ответ: JWT по природе не отзываемый, поэтому используют короткий TTL (5-15 мин) + refresh token. Для критичных систем — blacklist в Redis. Упоминание OAuth 2.1 (vs 2.0) и PKCE показывает актуальные знания.