OpenID Connect (OIDC) #
OpenID Connect решает чуть другую задачу, чем классический OAuth. Если OAuth 2.0 в первую очередь про авторизацию — дать приложению доступ к каким-то вашим данным без передачи пароля, — то OIDC добавляет поверх этого нормальную аутентификацию. То есть помогает сервису понять, кто именно к нему пришёл.
Когда подключается OpenID Connect, стороннее приложение может не только получить доступ к ресурсам, но и узнать базовые данные о пользователе. Делается это через специальный ID токен — отдельный объект, в котором зашита проверенная информация: уникальный идентификатор пользователя, почта, имя, время входа и так далее. Всё это подписано и защищено, чтобы нельзя было подменить данные на лету.
Практический сценарий выглядит примерно так. Пользователь жмёт «Войти через Google», попадает на знакомую страницу авторизации у Google, проходит вход, и в ответ приложение получает два полезных артефакта: токен доступа (по линии OAuth) и ID токен (по линии OIDC). Приложение проверяет подпись ID токена, убеждается, что он настоящий и не просрочен, и вытаскивает оттуда нужные поля про пользователя. Пароли при этом нигде не кочуют, отдельную локальную учётку можно вообще не делать.
OIDC сидит поверх уже обкатанного OAuth 2.0 и сфокусирован именно на аутентификации — ответе на вопрос «кто это?». Его поддерживают крупные игроки вроде Google, Microsoft, Amazon, Apple, а также большинство корпоративных SSO-систем, которые дают единый вход в кучу внутренних сервисов.
Чем это удобно на практике:
- упрощённый вход: пользователю не нужно заводить ещё один логин и пароль под каждый сервис;
- централизованная идентификация: один аккаунт — много приложений вокруг него;
- данные профиля передаются по защищённым каналам в стандартизованном формате;
- интеграция в веб и мобильные приложения обычно сводится к поддержке уже готовых библиотек и стандартных потоков.
В итоге OpenID Connect стал де-факто стандартом аутентификации для API, облаков, SaaS-платформ и вообще всего, где нужно надёжно узнать, кто к вам стучится, не превращая процесс в бесконечную регистрацию с локальными паролями.
Чем отличаются OAuth 2.0 и OpenID Connect #
Ключевая разница между ними в том, на какой вопрос они отвечают.
- OAuth 2.0 — протокол авторизации. Он решает задачу: как дать одному сервису ограниченный доступ к данным пользователя на другом сервисе без передачи пароля. При этом сам по себе OAuth не рассказывает, кто этот пользователь, он только выдаёт токен, с которым можно сходить за его данными.
- OpenID Connect — протокол аутентификации поверх OAuth 2.0. Он добавляет как раз тот самый слой, который позволяет понять, кто вошёл в систему, за счёт ID токена. То есть к авторизации «можно ли получить доступ» прикручивается идентификация «кто именно этот человек».
Если уж совсем упростить:
- OAuth 2.0 отвечает на вопрос: «Можно ли получить доступ к данным?»
- OpenID Connect отвечает на вопрос: «Кто этот пользователь?»
В реальных системах они почти всегда ходят парой: OAuth выдаёт токен доступа для работы с ресурсами, а OpenID Connect — ID токен с информацией о личности. Такая связка даёт приложениям и безопасный доступ к данным, и внятное понимание, кто именно эти данные запрашивает.
