Как работают OpenID Connect и OAuth 2.0

OpenID Connect помогает приложению узнать, кто вошёл, а OAuth 2.0 — получить разрешённый доступ к API. Разберём их связь на одном сценарии входа, роль токенов и пример из внутренней системы RB Tech.

Короткий ответ

OAuth 2.0 описывает получение ограниченного доступа к ресурсу. OpenID Connect, или OIDC, добавляет к нему стандартный способ подтвердить личность пользователя. Они работают вместе: приложение может получить результат входа и токен для обращения к API — программному интерфейсу другого сервиса.

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

Какие задачи решают OAuth 2.0 и OpenID Connect

OAuth 2.0 даёт приложению доступ к ресурсу

Рассмотрим условный пример: сервису планирования нужно прочитать события из календаря сотрудника. Сотрудник разрешает доступ у поставщика календаря, а сервис получает токен с ограниченными полномочиями. Передавать сервису пароль от календаря не требуется.

Токен предъявляют API календаря. Сервер проверяет его и решает, можно ли выполнить запрос. Разрешение читать события само по себе не означает разрешения удалять их. Запрашиваемую область доступа называют scope; конкретные значения определяет API.

Эту модель делегирования описывает спецификация OAuth 2.0. Она также предусматривает доступ приложения от собственного имени — например, для служебной интеграции без интерактивного входа человека.

OpenID Connect сообщает приложению, кто вошёл

Для создания пользовательского сеанса приложению нужен проверяемый результат аутентификации — подтверждения личности. OpenID Connect добавляет ID token: токен с идентификатором пользователя и сведениями о входе. Приложение проверяет его и находит соответствующую локальную учётную запись.

OIDC использует механизмы OAuth 2.0, поэтому выбирать между ними как между двумя независимыми способами входа не нужно. В одном обмене приложение может получить ID token для входа и access token для API. Связь протоколов определена в OpenID Connect Core.

Для связывания учётных записей учитывают поставщика идентификации и выданный им идентификатор пользователя — поле sub. Адрес электронной почты может измениться, поэтому автоматически считать его постоянным идентификатором небезопасно.

Что происходит при входе в веб-приложение

Рассмотрим типовую схему с серверной частью приложения. Токены получает и хранит сервер, а браузер работает с сеансом приложения. Для одностраничных и мобильных приложений размещение компонентов может отличаться.

После нажатия «Войти» приложение подготавливает запрос и перенаправляет браузер на сервер входа — поставщику идентификации, или Identity Provider (IdP). В запросе указаны приложение, разрешённый адрес возврата и область openid, которая включает OIDC.

В этой схеме используется PKCE (Proof Key for Code Exchange) — защита обмена одноразового кода на токены. Приложение создаёт для попытки входа случайное секретное значение: сначала отправляет вычисленный по нему отпечаток, а при обмене кода предъявляет само значение. Сервер проверяет их соответствие. Одного перехваченного кода для такого обмена недостаточно.

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

Как читать обмен

Пользователь проходит вход

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

Приложение получает код и обменивает его на токены

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

При обмене сервер проверяет секретное значение PKCE. Серверный клиент также подтверждает собственную подлинность способом, настроенным у поставщика идентификации. Эта проверка и PKCE решают разные задачи.

Приложение проверяет ответ и создаёт сеанс

OIDC-библиотека проверяет подлинность ответа, издателя токена, его назначение и срок действия. Параметр nonce связывает ID token с исходным запросом входа. Затем приложение проверяет привязку пользователя и допуск, создаёт локальный сеанс и сохраняет его идентификатор в браузере в cookie. Браузер передаёт эту cookie при следующих запросах к приложению, чтобы оно узнавало сеанс пользователя.

Если ответ не прошёл проверку или пользователю запрещён вход, сеанс не создаётся. Наличие строки, похожей на токен, ещё не подтверждает успешную аутентификацию.

Такой обмен называется Authorization Code Flow — получением токенов через код авторизации. Механизм PKCE описан в RFC 7636, а актуальные рекомендации по защите OAuth 2.0 — в RFC 9700. Проверки протокола лучше поручать поддерживаемой библиотеке, сохраняя в коде приложения собственные правила допуска и работы с данными.

Зачем нужны разные токены

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

ТокенНазначениеКто использует

ID token

Передаёт проверяемые сведения об аутентифицированном пользователе.

Приложение, которое выполняет вход.

Access token

Предъявляется при запросе к защищённому ресурсу в пределах выданных полномочий.

Клиент отправляет его API; API проверяет токен и допустимость операции.

Refresh token

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

Клиент предъявляет его серверу авторизации. Такой токен выдаётся не во всех сценариях.

Сеанс приложения — отдельный механизм. После проверки входа веб-приложение может узнавать браузер по cookie своего сеанса. В описанной серверной схеме браузеру не требуется получать access token или refresh token для каждого открытия страницы.

JSON Web Token (JWT) — формат токена с набором полей, например идентификатором пользователя, издателем и сроком действия. ID token имеет формат JWT; access token может иметь другой формат. Формат описан в RFC 7519.

Прочитать поля JWT ещё не значит проверить его подлинность. Для подписанного токена нужна проверка подписи, а также издателя, назначения и срока действия. Подпись защищает от незаметного изменения, но сама по себе не скрывает содержимое: для этого нужно шифрование. Назначение ID token не позволяет автоматически использовать его вместо access token.

Как связаны единый вход и права внутри приложения

SSO позволяет использовать общий вход в нескольких системах

SSO, или Single Sign-On, — единый вход. Если несколько приложений доверяют одному поставщику идентификации, он может использовать уже открытый сеанс пользователя при переходе в следующее приложение. Повторный ввод пароля может не понадобиться; дополнительное подтверждение зависит от политики и ситуации.

Каждое приложение при этом получает собственный результат входа и отдельно управляет своим сеансом. Корпоративный каталог, например Active Directory, может служить источником учётных записей. LDAP — протокол обращения к таким каталогам, а Keycloak — сервер, который предоставляет приложениям OIDC и другие механизмы входа. Подготовку этой связки разобрали в Практике внедрения единого входа.

Права на данные определяются правилами приложения

Корпоративный вход может подтвердить личность сотрудника и передать сведения о группах. Затем приложение решает, разрешён ли ему вход, какую роль назначить и какие объекты показать. Например, право открыть систему не означает права читать документы другого подразделения.

Полученные группы и области доступа нужно сопоставить с серверными правилами. Как проверить доступ к чужим объектам, административным операциям и отдельным полям, описано в Практике проверки авторизации API. Остальные области риска рассматривает обзор проверки безопасности API.

Выход и отзыв доступа охватывают несколько состояний

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

Удаление пользователя из группы может запретить новый вход, сохранив уже открытый сеанс до отдельной проверки или завершения. Для внедрения нужно определить, как быстро прекращается фактический доступ и что происходит с активными сеансами и токенами.

Как мы подключили внутреннюю систему к единому входу

Во внутренней рабочей системе RB Tech учётные записи уже были связаны с правами, данными и историей операций. Мы подключили корпоративный вход через Keycloak по OpenID Connect, сохранив эти связи.

Существующие учётные записи явно связали с идентификаторами пользователей у поставщика идентификации. Допуск к приложению ограничили корпоративной группой. Само наличие учётной записи в каталоге не создавало пользователя приложения автоматически и не давало ему бизнес-права.

При проверке интеграции подтвердили обмен OIDC, вход и выход для связанных учётных записей и отказ пользователю без допуска. Локальные идентификаторы и модель прав сохранились. Эти проверки относились к интеграции и допуску; многофакторная аутентификация (MFA) в них не проверялась.

В этом проекте удаление из группы блокирует новый вход, а немедленное прекращение уже открытого доступа требует блокировки учётной записи в самом приложении. Такой сценарий показывает, почему при подключении SSO нужно учитывать действующую модель пользователей и жизненный цикл сеансов.

Что это даёт бизнесу

Меньше отдельных паролей

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

Понятное разделение ответственности

Известно, где управляют учётной записью, кто разрешает вход и какая система отвечает за доступ к конкретным данным и операциям.

Повторяемое подключение систем

Стандартный обмен позволяет использовать готовые библиотеки. Для каждого приложения остаётся проверить совместимость, связать пользователей и настроить права.

Что дальше

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

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

Создано
24.10.2026
Обновлено
24.10.2026