Понимание токенов доступа, обновления и идентификации в протоколе OpenID Connect (OIDC)
Протокол OpenID Connect (OIDC) стал широко распространённым стандартом для управления идентификацией. Но действительно ли вы понимаете роли и атрибуты этих токенов?
OIDC, OAuth 2.0 и токены
Протокол OpenID Connect, также известный как OIDC, стал широко используемым стандартом, предоставляющим фундаментальную основу для управления идентификацией. Это уровень аутентификации, построенный поверх хорошо известного протокола OAuth 2.0. В то время как OAuth 2.0 предназначен только для авторизации ресурсов, OIDC является протоколом, который стандартизирует и усиливает аутентификацию клиента с помощью нового введенного идентификационного токена.
Стоп... Вы могли слышать о токенах доступа и обновления в эпоху OAuth, а теперь в OIDC появилась новая концепция? Действительно ли вы понимаете различия между этими токенами?
Что такое токены доступа, обновления и идентификационные токены в OIDC?
Начнём с практического сценария.
Представьте, что вы разрабатываете типичное клиент-серверное приложение, и они обмениваются данными друг с другом через RESTful API. Вы хотите, чтобы большинство ваших API оставались закрытыми, разрешая доступ только авторизованным клиентам. Вам понадобится механизм аутентификации клиента и авторизации API-запросов к вашему серверу.
В идеале, ваши RESTful API должны быть статLESS, то есть сервер не должен хранить информацию о сессии клиента. Когда поступает действительный запрос, сервер должен просто ответить запрашиваемыми данными. Здесь на помощь приходят токены. Итак, какой тип токена вы должны использовать в таком случае?
Токены доступа используются для защиты ваших API
В OAuth 2.0 и OIDC каждый защищённый API рассматривается как ресурс. Токен доступа — это тот самый токен, который клиент передаёт серверу при запросе ресурса API, обычно через заголовок запроса и в формате JWT.
На стороне сервера, когда поступает запрос, серверу нужно только проверить, несёт ли входящий запрос действительный токен доступа. Процесс проверки обычно включает декодирование JWT токена, проверку подписи и времени истечения, а также запрос scope для удостоверения того, что у клиента есть необходимые разрешения.
Однако вы можете задуматься: если моё клиентское приложение может иметь действительный токен доступа после успешного входа и использовать токен доступа для запросов к API сервера, разве этого недостаточно? Зачем мне нужны другие токены?
Вопрос действительно стоящий, и давайте объясним его шаг за шагом.
Почему нам нужны токены обновления?
Хотя технически токены доступа действительно соответствуют минимальным требованиям для работы системы, однако, из-за соображений безопасности срок действия токенов доступа обычно очень короткий (обычно около часа). Так что представьте, если у нас есть только токены доступа, конечные пользователи будут вынуждены проходить повторную аутентификацию каждый раз, когда токен доступа истекает. Для современных одностраничных веб-приложений (SPA) и особенно мобильных приложений частые разлогинивания являются довольно болезненным опытом для пользователя, даже если мы просто пытаемся защитить их безопасность.
Поэтому нам нужен баланс между безопасностью токенов и удобством пользователя. Вот почему были введены токены обновления.
Почему токены обновления могут иметь более долгий срок действия?
Токены доступа используются для доступа к ресурсам API, поэтому их краткосрочный характер помогает снизить риск утечки или компрометации. С другой стороны, поскольку токены обновления используются только для обмена на новые токены доступа, они не используются так часто, как токены доступа, и поэтому риск их утечки снижен. Таким образом, наличие более длинного времени действия считается приемлемым для токенов обновления.
Обеспечение безопасности токенов обновления
Поскольку токены обновления также хранятся на стороне клиента, обеспечение их некомпрометированности является сложной задачей, особенно для общедоступных клиентов, таких как одностраничные веб-приложения (SPA) и мобильные приложения.
В Logto токены обновления имеют автоматический механизм ротации, активированный по умолчанию, что означает, что сервер авторизации выдаст новый токен обновления, если он выполнит критерии:
- Одностраничные приложения: Признаны клиентами без ограничения отправителя, эти приложения требуют ротации токенов обновления. Время жизни (TTL) токена обновления не может быть указано.
- Родные приложения и традиционные веб-приложения: Ротация токенов обновления по умолчанию включена, автоматически обновляясь при достижении 70% от его TTL. Узнать больше
Хотя у вас есть возможность отключить ротацию токенов обновления на странице деталей приложения в админ-консоли, настоятельно рекомендуется сохранять эту защитную меру.
Что такое идентификационный токен и почему он важен?
Идентификационный токен — это уникальная особенность OIDC, предоставляющая информацию идентичности аутентифицированного пользователя.
В то время как токены доступа используются для доступа к защищённым ресурсам, а токены обновления для получения новых токенов доступа, идентификационные токены обычно используются для кэширования информации о пользователе на стороне клиента, уменьшая необходимость делать дополнительные запросы к серверу авторизации для получения данных пользователя. В большинстве случаев можно даже с уверенностью сказать, что получение идентификационного токена это эквивалентно аутентификации пользователя.
Лучшие практики по работе с токенами
- Используйте HTTPS: Всегда используйте HTTPS для защиты связи между клиентом и сервером авторизации. Это предотвращает возможность перехвата и кражи токенов мошенниками.
- Установите правильное время истечения токенов: Токены доступа должны иметь короткий срок действия, чтобы минимизировать риск их утечки. Токены обновления могут иметь более длительный срок действия.
- Включите ротацию токенов обновления: Реализуйте ротацию токенов обновления для снижения риска утечки токенов обновления.
- Используйте тщательный контроль доступа: Используйте точные объемы, чтобы ограничить разрешения токенов доступа. Запрашивайте только необходимые разрешения для клиентского приложения. Избегайте использования "all" или "admin" объемов для обхода большинства проверок разрешений, если это не абсолютно необходимо.
Резюме: Ключевые различия токенов доступа, обновления и идентификационных токенов в OIDC
В протоколе OIDC токены обновления, доступа и идентификации работают вместе, чтобы обеспечить безопасную и беспрепятственную аутентификацию пользователей.
- Токены доступа предоставляют авторизацию для доступа к защищённым ресурсам.
- Токены обновления устраняют необходимость вмешательства пользователя для получения новых токенов доступа.
- Идентификационные токены предоставляют кэшированную информацию о пользователе на стороне клиента, улучшая производительность.
Понимание роли и значения этих токенов имеет решающее значение для разработчиков, реализующих аутентификацию OIDC в своих приложениях.