• oidc
  • oauth
  • ресурс api
  • jwt
  • токен доступа
  • непрозрачный токен

Соединение точек: глубокое исследование ресурсов OIDC и ваших JWT-токенов доступа

Этот блог стремится пролить свет на отношения между индикаторами ресурса OIDC и их ролью в получении токенов доступа.

Charles
Charles
Developer

Предыстории

Впредыдущей сессии, мы предоставили введение в протокол OpenID Connect (OIDC), токены обновления, токены доступа и идентификаторы токенов, необходимые компоненты для создания надежной аутентификации в вашем приложении. Однако вопросы все еще остаются в нашем сообществе, с одним повторяющимся запросом: "Почему мой токен доступа не является JWT?”

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

Понимание ресурса OIDC

Если вы знакомы с протоколом OAuth 2.0, то термин"ресурс" должен прозвучать знакомо. Поскольку OIDC основан на OAuth 2.0, он наследует эту же концепцию.

"Ресурс" или "защищенный ресурс" - это представление сущности, доступ к которой клиентское приложение хочет получить от имени аутентифицированного пользователя. Это может быть информация о пользователе, API сервера или любые другие данные, авторизованные вашим сервером.

Согласно протоколу, ресурс - это параметр в запросах на сервер авторизации. Это значение, представленное в виде абсолютного URI, например, https://my-company.com/api. Он выступает в качестве идентификатора ресурса, возможно соответствующего адресуемому по сети местоположению или даже уникальному, но выдуманному URI.

В Logto вы можете создать "API ресурс" через страницу "Admin Console → API resources". Вы можете обратиться к данной документации для получения дополнительной информации.

JWT-токен доступа

Формат токена доступа JWT выдается только в том случае, если при запросе токена доступа указан параметр "ресурс", и он несет набор утверждений, которые вы можете расшифровать и проверить, например, чтобы гарантировать целостность токена и права пользователя.

Этот "ресурс" становится одним из утверждений токена aud в JWT, указывающим предполагаемую аудиторию для токена. См. RFC-7519.

Таким образом, становится ясной следующая связь:

  • Указывайте индикатор ресурса при запросе токена JWT.
  • Индикатор ресурса соответствует заявке токена aud.
  • При выполнении запросов API токен доступа JWT должен быть включен в заголовок токена передатчика. Ваш API-сервер должен расшифровывать и проверять заявку aud и другие заявки, связанные с разрешениями, чтобы обеспечить безопасность запроса API.
  • Каждый токен доступа соответствует одному ресурсу. Если у вас зарегистрировано несколько ресурсов API с разными URI, запросите отдельные токены доступа для каждого.

🤔 Но что, если клиент не указывает ресурс при запросе токена доступа?

Непрозрачный токен доступа

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

В любом SDK Logto вы можете получить такой токен, если вызовете getAccessToken() или напрямую запросите конечную точку токена OIDC без указания параметра resource.

Обратите внимание, что этот непрозрачный токен доступа не подходит для запросов вашего собственного API-ресурса, так как нет способа его проверить без запроса сервера OIDC.

В итоге

OIDC ресурсы определяют конкретные данные или услуги, к которым клиентское приложение хочет получить доступ от имени пользователя, с JWT-токенами доступа, служащими безопасным средством для этого доступа. Заявка "aud" в JWT-токенах доступа соответствует индикатору ресурса, помогая серверам при проверке разрешений при клиентских запросах.

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

Мы надеемся, что этот блог поможет развеять все сомнения и соединить точки для вас. Не стесняйтесь сообщить нам свои мысли.