ID токен, токен идентификации (ID Token)

ID токен, токен идентификации (ID Token)

ID токен, токен идентификации (ID Token) — это JSON веб-токен, который содержит параметры аутентификации конечного пользователя сервером авторизации. Может содержать также другие параметры, такие как информация о профиле пользователя.

Назначение

ID токен — ключевой элемент протокола OpenID Connect (OIDC), который расширяет OAuth 2.0 для аутентификации пользователей. Его основные задачи:

  • Подтверждение аутентификации: Доказывает, что пользователь успешно прошел проверку личности через сервер авторизации.
  • Передача информации: Содержит данные о пользователе, такие как идентификатор, имя, email или другие атрибуты, для использования в клиентском приложении.
  • Обеспечение безопасности: Подписывается сервером авторизации, что гарантирует его подлинность и защиту от изменений.
  • Персонализация: Позволяет приложению адаптировать интерфейс или функциональность под конкретного пользователя без дополнительных запросов.

ID токены применяются в веб-приложениях, мобильных приложениях и других системах, где требуется аутентификация через сторонние провайдеры идентификации.

Формат

ID токен — это JSON Web Token (JWT), состоящий из трех частей, разделенных точкой (.):

  1. Заголовок (Header):
    • Содержит метаданные, такие как тип токена (JWT) и алгоритм подписи (например, RS256).
    • Пример: {«alg»: «RS256», «typ»: «JWT»}.
  2. Тело (Payload):
    • Содержит утверждения (claims) — данные о пользователе и аутентификации.
    • Основные утверждения:
      • iss (issuer): URL сервера авторизации, выдавшего токен.
      • sub (subject): Уникальный идентификатор пользователя.
      • aud (audience): Идентификатор клиентского приложения, для которого предназначен токен.
      • exp (expiration): Время истечения срока действия токена (обычно 1 час).
      • iat (issued at): Время выдачи токена.
      • jti (JWT ID): Уникальный идентификатор токена для предотвращения повторного использования.
      • Дополнительные: name, email, picture и другие данные о пользователе.
  3. Подпись (Signature):
    • Создается с использованием закрытого ключа сервера авторизации.
    • Позволяет клиенту проверить подлинность и целостность токена с помощью публичного ключа.

ID токен кодируется в Base64 и не шифруется, поэтому его содержимое доступно для чтения, но подпись защищает от изменений.

Как работает

ID токен создается в рамках процесса аутентификации OpenID Connect:

  1. Аутентификация пользователя: Пользователь вводит учетные данные (например, логин и пароль) через интерфейс сервера авторизации.
  2. Выдача токена: После успешной проверки сервер авторизации генерирует ID токен и передает его клиентскому приложению.
  3. Проверка токена: Клиент декодирует токен, проверяет подпись с помощью публичного ключа и подтверждает, что токен выдан доверенным сервером и не истек.
  4. Использование данных: Клиент использует утверждения из токена для отображения информации о пользователе или настройки функциональности.

Срок действия ID токена обычно составляет около часа, после чего требуется повторная аутентификация или использование токена обновления для получения нового токена.

Сравнение с токеном доступа

ID токен и токен доступа — разные артефакты с четко разделенными ролями в OAuth 2.0 и OpenID Connect:

Характеристика ID токен Токен доступа
Назначение Подтверждение аутентификации Доступ к защищенным ресурсам
Формат JWT, содержит данные о пользователе Может быть любым (часто JWT)
Получатель Клиентское приложение Сервер ресурсов (API)
Содержимое Утверждения о пользователе и токене Разрешения (scopes)
Использование Персонализация, проверка личности Вызов API, авторизация операций

Использование ID токена для вызова API или проверки токена доступа клиентом может привести к уязвимостям, так как ID токен не содержит разрешений (scopes) и не привязан к каналу клиент-API.

Применение

ID токены используются в следующих сценариях:

  • Единый вход (SSO): Пользователь аутентифицируется один раз через сервер авторизации, а ID токен позволяет получить доступ к нескольким приложениям.
  • Персонализация интерфейса: Приложение отображает имя, фото или другие данные пользователя из токена.
  • Подтверждение личности: Приложение проверяет, что пользователь — это тот, за кого себя выдает, через утверждения токена.
  • Интеграция с внешними системами: ID токены используются для аутентификации в сторонних системах, поддерживающих OIDC.

Пример: Веб-приложение получает ID токен после входа пользователя и показывает приветствие «Добро пожаловать, Иван!» на основе утверждения name.

Безопасность

ID токены обеспечивают высокий уровень безопасности благодаря следующим мерам:

  • Подпись: Токен подписывается закрытым ключом сервера авторизации, что позволяет проверить его подлинность с помощью публичного ключа.
  • Ограниченный срок действия: Короткий срок действия (обычно 1 час) снижает риск использования украденного токена.
  • Утверждение aud: Указывает конкретное клиентское приложение-получатель, предотвращая использование токена в других приложениях.
  • Уникальный идентификатор (jti): Защищает от повторного использования токена.

Однако есть риски:

  • Утечка токена: Если токен украден, злоумышленник может использовать его до истечения срока действия.
  • Неправильное использование: Использование ID токена для вызова API игнорирует scopes и механизмы привязки, создавая уязвимости.

Для повышения безопасности:

  • Используйте HTTPS для передачи токенов.
  • Проверяйте все утверждения (iss, aud, exp) при валидации токена.
  • Храните токены в безопасных местах, избегая их передачи в незащищенных каналах.

Ограничения

  • Не для авторизации: ID токен не содержит scopes и не предназначен для доступа к ресурсам.
  • Ограниченная информация: Может не включать все данные о пользователе, требуя дополнительных запросов.
  • Зависимость от сервера авторизации: Требуется доверенный сервер для выдачи и проверки токенов.

Значение в современных системах

ID токен — важный компонент OpenID Connect, обеспечивающий безопасную и удобную аутентификацию в современных приложениях. Он позволяет интегрировать приложения с внешними провайдерами идентификации, упрощая единый вход и персонализацию. С развитием стандартов, таких как OpenID Connect for Identity Assurance, ID токены становятся еще более гибкими, поддерживая дополнительные утверждения для проверки личности.