Вопрос с собеседования · Spring

Чем 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

Подробно

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».

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗JWT — протокол входа, OAuth2 — формат токена
  • ✗Это названия одного стандарта
  • ✗OAuth2 сам сообщает, кто пользователь, а OIDC нужен только для шифрования токенов при передаче по сети
  • ✓JWT — формат токена; OAuth2 — делегирование доступа; OIDC — аутентификация поверх OAuth2

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

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

Разбор темы

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

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования