OpenID Connect (OIDC)
Добавление идентификации поверх OAuth
«OpenID Connect (OIDC)» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Зачем нужен OIDC
OpenID Connect — это тонкий уровень идентификации, построенный поверх OAuth 2.0. OAuth отвечает на вопрос что может делать это приложение, а OIDC — на вопрос кто этот пользователь.
- Он стандартизирует способ аутентификации пользователей клиентами и получения подтвержденных утверждений об идентичности.
- Он вводит ID-токен как криптографически подписанное утверждение о прохождении аутентификации.
До появления OIDC разработчики использовали токены доступа OAuth не по назначению для входа в систему, что приводило к ошибкам с полномочиями и подмене личности.
ID-токен (JWT)
Главный артефакт OIDC — это ID-токен, подписанный JWT, описывающий событие аутентификации.
- Он содержит утверждения о том, кто вошел в систему и когда это произошло.
- Он предназначен для обработки клиентом, а не сервером ресурсов.
Никогда не отправляйте ID-токен в API как учетные данные доступа и никогда не принимайте его без проверки подписи и утверждений.
Header.Payload.Signature
{
"iss": "https://idp.example",
"sub": "248289761001",
"aud": "app123",
"exp": 1718000000,
"iat": 1717996400,
"nonce": "n-abc"
}Основные утверждения ID-токена
Проверка ID-токена означает проверку конкретных утверждений, а не только подписи.
- Издатель iss должен соответствовать ожидаемому IdP.
- Аудитория aud должна содержать ваш client_id.
- exp / iat: срок действия токена не должен истечь, а сам токен должен быть выпущен недавно.
- sub: стабильный уникальный идентификатор пользователя.
- nonce должен совпадать со значением, отправленным вашим клиентом.
Поток аутентификации OIDC
OIDC повторно использует поток кода авторизации, добавляя область доступа openid и значение nonce.
- Клиент запрашивает область доступа
openid(а также необязательныеprofileиemail). - Конечная точка токенов возвращает ID-токен вместе с токеном доступа.
nonceсвязывает ID-токен с исходным запросом и предотвращает повторное использование.
GET /authorize?response_type=code
&scope=openid profile email
&client_id=app123
&redirect_uri=https://app.example/cb
&state=xyz&nonce=n-abcПроверка подписи с помощью JWKS
Поставщики OIDC публикуют ключи подписи в конечной точке JWKS, которую можно обнаружить через документ общедоступной конфигурации.
- Получите ключи из
jwks_uriи сопоставьте их с заголовкомkidтокена. - Проверьте подпись с помощью указанного асимметричного алгоритма (RS256, ES256).
Отклоняйте алгоритм none и никогда не доверяйте значению алгоритма, переданному только самим токеном.
GET /.well-known/openid-configuration
-> { "jwks_uri": "https://idp.example/jwks", ... }
GET /jwks
-> { "keys": [ { "kid": "k1", "kty": "RSA", ... } ] }Параметр nonce защищает от повторного воспроизведения
Для ID-токенов nonce выполняет ту же роль, что и state для перенаправления: это одноразовое значение, связывающее ответ с запросом.
- Клиент создает случайное значение nonce и сохраняет его в сеансе.
- IdP возвращает его внутри ID-токена.
- Получив токен, клиент проверяет, что nonce совпадает и еще не использовался.
Это блокирует повторное использование токена и внедрение токена, выпущенного для другого сеанса.
Конечная точка UserInfo
Для получения дополнительных данных профиля помимо ID-токена OIDC определяет конечную точку UserInfo.
- Клиент обращается к ней с помощью токена доступа, а не ID-токена.
- Она возвращает такие утверждения, как имя, адрес электронной почты и изображение, для аутентифицированного субъекта.
Всегда сопоставляйте возвращенный sub с sub из ID-токена, чтобы предотвратить подмену утверждений.
GET /userinfo
Authorization: Bearer <access_token>
-> { "sub": "248289761001", "email": "u@example.com" }Обнаружение и метаданные
OIDC стандартизирует механизм обнаружения, чтобы клиенты могли автоматически настраивать конечные точки и поддерживаемые функции.
- Документ
/.well-known/openid-configurationсодержит список конечных точек, поддерживаемых областей доступа и алгоритмов. - Закрепляйте или проверяйте издателя; не переходите без проверки к данным обнаружения с узла, контролируемого атакующим.
Обнаружение упрощает интеграцию, но издатель остается основой доверия, которую необходимо проверять.
Выход через передний и обратный канал
Завершение сеансов в федерации приложений регулируется спецификациями выхода OIDC.
- Выход через передний канал использует перенаправления браузера и встроенные фреймы для очистки сеанса у каждой доверяющей стороны.
- Выход через обратный канал отправляет токены выхода между серверами; этот способ надежнее, но требует наличия конечных точек.
Без согласованного выхода пользователь может выйти из одного приложения, сохранив вход в другие, что создает реальный риск для управления сеансами.
Распространенные ошибки OIDC
Ошибки идентификации часто возникают из-за пропуска этапов проверки.
- Прием токенов без проверки aud (токен предназначен для другого клиента).
- Игнорирование iss, позволяющее подменить IdP.
- Отсутствие проверки подписи или принятие
alg: none. - Путаница между ID-токенами и токенами доступа.
- Отсутствие проверки nonce, позволяющее повторное воспроизведение.
Validation checklist:
[ ] iss == expected
[ ] aud contains client_id
[ ] exp not passed, iat sane
[ ] signature verified via JWKS
[ ] nonce matches sessionOIDC и обычный OAuth для входа в систему
Если ваша цель — вход в систему, используйте OIDC, а не обычный OAuth.
- Токены доступа OAuth непрозрачны для клиента и ничего не доказывают об идентичности пользователя.
- Токен доступа может быть действительным для другого пользователя или приложения; его использование для входа может привести к подмене личности.
- ID-токены OIDC являются утверждениями идентичности, явно привязанными к аудитории.
Это различие предотвращает классическую уязвимость аутентификации, связанную с ошибочным использованием полномочий заместителя.
Быстрая проверка: проверка ID-токена
Выберите наиболее важный этап проверки для доверяющей стороны, обрабатывающей ID-токен.
Итоги: OpenID Connect
Основные выводы:
- OIDC добавляет уровень идентификации поверх OAuth 2.0; ID-токен — это подписанный JWT, подтверждающий прохождение аутентификации.
- Всегда проверяйте iss, aud, exp, подпись (через JWKS) и nonce.
- ID-токены предназначены для клиента, а токены доступа — для API; никогда не меняйте их роли местами.
- Используйте
nonceдля защиты от повторного воспроизведения, аstate— для защиты от CSRF. - Используйте OIDC, а не обычный OAuth, когда требуется аутентифицировать пользователей.
Часто задаваемые вопросы
Урок «OpenID Connect (OIDC)» бесплатный?
Да — полный текст урока «OpenID Connect (OIDC)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «OpenID Connect (OIDC)»?
Добавление идентификации поверх OAuth Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «OpenID Connect (OIDC)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Потоки OAuth 2.0
- OpenID Connect (OIDC)
- SAML и федерация
- Атаки на токены и усиление защиты