Русский
  • токен
  • oidc
  • токен обновления
  • токен доступа
  • ID токен

Понимание токенов доступа, токенов обновления и ID токенов в протоколе OpenID Connect (OIDC)

Протокол OpenID Connect (OIDC) стал широко принятым стандартом управления идентификацией. Но действительно ли вы понимаете роли и атрибуты этих токенов?

Charles
Charles
Developer

OIDC, OAuth 2.0 и токены

Протокол OpenID Connect, также известный как OIDC, стал широко признанным стандартом, предоставляющим основную структуру для управления идентификацией. Это уровень аутентификации, построенный поверх известного протокола OAuth 2.0. В то время как OAuth 2.0 предназначен только для авторизации ресурсов, OIDC — это протокол, который стандартизирует и укрепляет аутентификацию клиента с помощью нового введенного ID токена.

Подождите... Возможно, вы слышали о токенах доступа и токенах обновления во времена OAuth, а теперь в OIDC появляется новая концепция? Действительно ли вы понимаете различия между этими токенами?

Что такое токены доступа, токены обновления и ID токены в OIDC?

Давайте начнем с практического сценария.

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

Идеально, если бы ваши RESTful API были статeless, то есть сервер не должен хранить информацию о сессии клиента. Всякий раз, когда приходит действительный запрос, сервер должен просто отвечать запрашиваемыми данными. Здесь на помощь приходят токены. Итак, какой тип токена следует использовать в таком случае?

Токены доступа используются для защиты ваших API

В OAuth 2.0 и OIDC каждый защищённый API рассматривается как ресурс. Токен доступа — это именно тот токен, который клиент передаёт серверу при запросе API ресурса, обычно через заголовок запроса и в формате JWT.

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

Однако вы можете задуматься: если мое клиентское приложение может иметь действительный токен доступа после успешного входа и использовать токен доступа для запроса серверных API, этого ли достаточно? Зачем нужны другие токены?

Действительно, хороший вопрос, давайте объясним шаг за шагом.

Зачем нам нужны токены обновления?

Хотя технически токены доступа действительно соответствуют минимальным требованиям для функционирования системы, однако из-за соображений безопасности срок действия токенов доступа обычно очень короткий (обычно час). То есть, если бы у нас были только токены доступа, конечным пользователям пришлось бы повторно аутентифицироваться каждый раз, когда токен доступа истекает. Для современных одностраничных веб-приложений (SPA) и особенно мобильных приложений частые выходы из системы были бы довольно болезненным опытом пользователей, даже если мы всего лишь пытаемся защитить их безопасность.

Поэтому нам нужен баланс между безопасностью токенов и удобством пользователей. Вот почему были введены токены обновления.

Почему токены обновления могут иметь более долгий срок действия?

Токены доступа используются для доступа к API ресурсам, поэтому их краткосрочный характер помогает уменьшить риск утечки или компрометации. С другой стороны, поскольку токены обновления используются только для обмена на новые токены доступа, они не используются так часто, как токены доступа, и, таким образом, риск их раскрытия снижен. Поэтому считается приемлемым, если срок действия токенов обновления длиннее.

Обеспечение безопасности токенов обновления

Поскольку токен обновления также хранится на клиентской стороне, обеспечение их невзламываемости является вызовом, особенно для публичных клиентов, таких как одностраничные веб-приложения (SPA) и мобильные приложения.

В Logto токены обновления имеют автоматический механизм вращения, включенный по умолчанию, это значит, что сервер авторизации будет выдавать новый токен обновления, как только он выполнит критерии:

  • Одностраничные приложения: Признаны клиентами без ограничения отправителя, эти приложения требуют вращения токенов обновления. Время жизни токена обновления (TTL) не может быть указано.
  • Нативные приложения и традиционные веб-приложения: Вращение токенов обновления изначально включено, автоматически обновляясь при достижении 70% своего TTL. Узнайте больше о вращении токенов обновления в Logto.

Хотя у вас все еще есть возможность отключить вращение токенов обновления на странице сведений о приложении в административной консоли, настоятельно рекомендуется сохранить эту защитную меру.

Что такое ID токен и почему он важен?

ID токен — это уникальная функция OIDC, которая предоставляет информацию о личности аутентифицированного пользователя.

В то время как токены доступа используются для доступа к защищённым ресурсам, а токены обновления используются для получения новых токенов доступа, ID токены обычно используются для кэширования информации о пользователе на стороне клиента, уменьшая необходимость в дополнительных запросах к серверу авторизации для получения данных пользователя. В большинстве случаев можно даже сказать, что наличие ID токена эквивалентно аутентификации пользователя.

Лучшие практики работы с токенами

  • Используйте HTTPS: Всегда используйте HTTPS для защиты связи между клиентом и сервером авторизации. Это предотвращает перехват и кражу токенов неавторизованными сторонами.
  • Установите правильное время истечения для токенов: Токены доступа должны иметь короткий срок действия, чтобы минимизировать риск раскрытия. Токены обновления могут иметь дольше срок действия.
  • Включите вращение токенов обновления: Реализуйте вращение токенов обновления, чтобы уменьшить риск утечки токенов обновления.
  • Используйте тонкую настройку управления доступом: Используйте тонкие области для ограничения разрешений токенов доступа. Запрашивайте только те разрешения, которые необходимы для клиентского приложения. Избегайте использования областей "all" или "admin" для обхода большинства проверок разрешений, если это не абсолютно необходимо.

Итог: Ключевые различия токенов доступа, токенов обновления и ID токенов в OIDC

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

  • Токены доступа предоставляют авторизацию для доступа к защищённым ресурсам.
  • Токены обновления устраняют необходимость вмешательства пользователя для получения новых токенов доступа.
  • ID токены предоставляют кэшированную информацию о пользователе на клиенте, улучшая производительность.

Понимание роли и значения этих токенов важно для разработчиков, реализующих аутентификацию по OIDC в своих приложениях.