Gymterview
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 показывает актуальные знания.