ID токен, токен идентификации (ID Token) — это JSON веб-токен, который содержит параметры аутентификации конечного пользователя сервером авторизации. Может содержать также другие параметры, такие как информация о профиле пользователя.
Назначение
ID токен — ключевой элемент протокола OpenID Connect (OIDC), который расширяет OAuth 2.0 для аутентификации пользователей. Его основные задачи:
- Подтверждение аутентификации: Доказывает, что пользователь успешно прошел проверку личности через сервер авторизации.
- Передача информации: Содержит данные о пользователе, такие как идентификатор, имя, email или другие атрибуты, для использования в клиентском приложении.
- Обеспечение безопасности: Подписывается сервером авторизации, что гарантирует его подлинность и защиту от изменений.
- Персонализация: Позволяет приложению адаптировать интерфейс или функциональность под конкретного пользователя без дополнительных запросов.
ID токены применяются в веб-приложениях, мобильных приложениях и других системах, где требуется аутентификация через сторонние провайдеры идентификации.
Формат
ID токен — это JSON Web Token (JWT), состоящий из трех частей, разделенных точкой (.):
- Заголовок (Header):
- Содержит метаданные, такие как тип токена (JWT) и алгоритм подписи (например, RS256).
- Пример: {«alg»: «RS256», «typ»: «JWT»}.
- Тело (Payload):
- Содержит утверждения (claims) — данные о пользователе и аутентификации.
- Основные утверждения:
- iss (issuer): URL сервера авторизации, выдавшего токен.
- sub (subject): Уникальный идентификатор пользователя.
- aud (audience): Идентификатор клиентского приложения, для которого предназначен токен.
- exp (expiration): Время истечения срока действия токена (обычно 1 час).
- iat (issued at): Время выдачи токена.
- jti (JWT ID): Уникальный идентификатор токена для предотвращения повторного использования.
- Дополнительные: name, email, picture и другие данные о пользователе.
- Подпись (Signature):
- Создается с использованием закрытого ключа сервера авторизации.
- Позволяет клиенту проверить подлинность и целостность токена с помощью публичного ключа.
ID токен кодируется в Base64 и не шифруется, поэтому его содержимое доступно для чтения, но подпись защищает от изменений.
Как работает
ID токен создается в рамках процесса аутентификации OpenID Connect:
- Аутентификация пользователя: Пользователь вводит учетные данные (например, логин и пароль) через интерфейс сервера авторизации.
- Выдача токена: После успешной проверки сервер авторизации генерирует ID токен и передает его клиентскому приложению.
- Проверка токена: Клиент декодирует токен, проверяет подпись с помощью публичного ключа и подтверждает, что токен выдан доверенным сервером и не истек.
- Использование данных: Клиент использует утверждения из токена для отображения информации о пользователе или настройки функциональности.
Срок действия 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 токены становятся еще более гибкими, поддерживая дополнительные утверждения для проверки личности.