Получить доступ

Чем JWT отличается от OAuth2/OIDC?

SeniorSpring Security
Ещё спрашивают так:
  • Чем OAuth2 отличается от OpenID Connect?
Коротко

Разные уровни: JWT — формат токена (подписанный JSON). OAuth2 — протокол делегирования доступа: как приложение получает токен доступа к API от имени пользователя. OIDC — надстройка над OAuth2 для аутентификации: ID Token (JWT) с данными о пользователе.

  • Access token в OAuth2 может быть JWT, а может быть непрозрачной строкой
  • OAuth2 сам не говорит, кто пользователь, — для входа нужен OIDC
  • В Spring: oauth2Login (клиент, вход через OIDC) и oauth2ResourceServer (API проверяет токены)

А ещё Провайдеры: Keycloak, Яндекс ID, Google, Auth0

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

JWT — способ упаковать утверждения (claims) в подписанный токен: header.payload.signature. Ничего не говорит о том, как токен получен.

OAuth2 — фреймворк авторизации: роли — владелец ресурса (пользователь), клиент (приложение), сервер авторизации, сервер ресурсов (API). Потоки получения токена: authorization code (+PKCE) для веб и мобильных приложений, client credentials для сервис-к-сервису, device code для ТВ. Результат — access token с областями доступа (scopes): «этому приложению можно читать календарь». OAuth2 не определяет формат токена и не предназначен для входа.

OpenID Connect добавляет аутентификацию: при scope openid сервер возвращает ID Token — JWT с sub (идентификатор пользователя), iss, aud, exp, и есть эндпоинт userinfo. Это «вход через Яндекс ID».

В Spring Security:

  • oauth2Login() — приложение-клиент: перенаправляет на провайдера, получает ID Token, создаёт сессию;
  • oauth2ResourceServer().jwt() — API проверяет подпись access token по JWKS провайдера и берёт права из claims;
  • Spring Authorization Server — свой сервер авторизации.

Что хотят услышать

  • Уровни: формат, протокол доступа, протокол аутентификации.
  • Access token и ID Token.
  • Потоки OAuth2 и поддержка в Spring.

Частые ошибки

  • Использовать access token как доказательство личности для входа.
  • Говорить «OAuth2 — это JWT».

Что спросят дальше

  • Что такое scope vs role?
  • Когда нужен opaque token?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем