OpenID против OAuth
July 3, 2024
Для обеспечения безопасности пользовательской информации и предоставления сторонним приложениям доступа к ограниченным ресурсам появились две основные технологии: OpenID Connect и OAuth. Хотя эти две технологии часто обсуждаются вместе, они принципиально отличаются по своим функциональным задачам и основным целям.
Конкретно, OAuth ориентирован на создание фреймворка для авторизации, его основная цель — предоставить сторонним приложениям разрешение на доступ к определенным ресурсам, без прямого участия в проверке личности пользователя. В то время как OpenID Connect позиционируется как сервис аутентификации, заполняя пробел, который OAuth имеет в области идентификации пользователей, и обеспечивая подлинность и надежность их личностей.
В этом блоге мы углубимся в суть, механизмы работы, типичные сценарии применения и тонкую, но тесную связь между OpenID Connect и OAuth.
Что такое OpenID Connect?
OpenID Connect (OIDC) — это протокол аутентификации, основанный на фреймворке OAuth 2.0, который расширяет функциональность OAuth, вводя концепцию ID-токена. OIDC не только позволяет пользователям авторизовать сторонние приложения для доступа к их ресурсам, но также предоставляет проверку информации о личности пользователя, обеспечивая безопасный доступ к нескольким сервисам с использованием одного набора учетных данных для входа.
По сравнению с OAuth 2.0, ключевое отличие OIDC заключается в добавлении уровня аутентификации, в то время как OAuth 2.0 в основном сосредоточен на авторизации, позволяя пользователям контролировать права доступа сторонних приложений к их ресурсам, без участия в конкретной проверке личности пользователя.
Процесс аутентификации OpenID Connect:
-
Доступ к приложению: Когда пользователь хочет использовать приложение или сервис, если приложению необходимо проверить личность пользователя, пользователь будет перенаправлен к поставщику услуг аутентификации, OpenID Connect provider (OP) для входа.
-
Вход пользователя: Пользователь вводит свои имя пользователя и пароль (или проходит другие механизмы аутентификации, поддерживаемые OP) на интерфейсе входа OP. После успешного входа, поставщик OpenID Connect подтвердит личность пользователя.
-
Выдача ID-токена: После подтверждения личности пользователя, поставщик OpenID Connect сгенерирует специальный токен, называемый ID-токеном. Этот токен содержит информацию о личности пользователя, такую как имя пользователя, адрес электронной почты и другие ключевые данные, обеспечивая цифровое представление и передачу личности пользователя.
-
Использование ID-токена: После получения ID-токена, пользователь может предъявить его приложению, к которому он ранее хотел получить доступ. Приложение затем активирует механизм проверки, чтобы проверить токен и подтвердить, что он выдан доверенным поставщиком OpenID Connect и что он не истек.
-
Доступ к приложению: Как только приложение проверит действительность ID-токена, оно разрешит пользователю доступ к защищенным ресурсам или сервисам. Таким образом, пользователю не нужно регистрироваться и входить в каждое приложение отдельно, но можно использовать ID-токен, выданный поставщиком OpenID Connect.
-
Обеспечение безопасности: OpenID Connect использует передовую технологию JSON Web Token (JWT) для генерации и проверки токенов, эффективно снижая риски подделки и кражи данных. Кроме того, OpenID Connect также гибко поддерживает несколько режимов аутентификации и авторизации, таких как режим авторизационного кода, неявный режим и гибридный режим, чтобы адаптироваться к требованиям безопасности различных сценариев.
Что такое OAuth?
Короче говоря, OAuth — это протокол, который позволяет сторонним приложениям получать доступ к чувствительным ресурсам пользователя (таким как библиотеки фотографий, списки контактов и т.д.), хранящимся на другом сервисе, без прямого доступа к учетным данным пользователя (имя пользователя и пароль). Этот механизм больше склоняется к "авторизации", чем к "аутентификации".
Например, если вы хотите использовать свой аккаунт Google для входа в новостное приложение, приложение может использовать OAuth для запроса вашей публичной информации (такой как аватар и никнейм) из вашего аккаунта Google, без необходимости предоставлять имя пользователя и пароль Google напрямую новостному приложению.
Процесс авторизации OAuth:
-
Запрос авторизации пользователя: Предположим, вы используете социальное приложение, которое хочет получить доступ к информации из вашего аккаунта в другой социальной сети. Однако эта информация защищена, поэтому требуется авторизация.
-
Перенаправление на сервер авторизации: Стороннее приложение перенаправит ваш запрос на страницу сервера авторизации, который обычно попросит вас войти в сервис, который вы хотите авторизовать.
-
Вход пользователя и авторизация: На странице сервера авторизации вам нужно войти в свой аккаунт. После входа, страница спросит, согласны ли вы предоставить стороннему приложению доступ к вашей информации.
-
Сервер авторизации выдает токен доступа: Если вы согласны, сервер авторизации сгенерирует специальный "пропуск", называемый токеном доступа. Этот токен похож на временный пропуск, который позволяет стороннему приложению получать доступ к вашей информации в течение определенного времени.
-
Использование токена доступа сторонним приложением: Как только стороннее приложение получит токен доступа, оно может использовать этот токен для запроса вашей информации в течение определенного времени. Каждый раз, когда оно делает запрос, оно должно предъявить этот токен, чтобы доказать, что оно было авторизовано вами.
-
Сервер авторизации проверяет токен и возвращает ресурс: Когда стороннее приложение предъявляет токен доступа серверу авторизации, который хранит вашу информацию, сервер авторизации проверит, действителен ли токен. Если он действителен, он разрешит стороннему приложению доступ к соответствующей информации на основе прав токена.
Применяя подход OAuth, не только значительно повышается безопасность вашего аккаунта, так как вам не нужно напрямую раскрывать имя пользователя и пароль стороннему приложению, но также предоставляется гибкий механизм авторизации, позволяющий вам самостоятельно решать, какие приложения могут получать доступ к какой вашей информации, тем самым достигая точного контроля над потоком вашей личной информации.
Различия и связи между OpenID Connect и OAuth
Различия и связи между OpenID Connect и OAuth особенно ярко проявляются в практических приложениях. Предположим, существует онлайн-сайт для домашних животных под названием "Рай для питомцев", где клиенты могут покупать товары для домашних животных, а также предоставляется приложение для отслеживания здоровья питомцев, где клиенты могут записывать данные о здоровье своих питомцев, такие как вес, диета и статус вакцинации.
Применение OpenID Connect в этом случае:
-
Аутентификация: Когда клиенты впервые посещают сайт "Рай для питомцев" или скачивают и используют приложение для отслеживания здоровья питомцев, им нужно зарегистрироваться и войти. Чтобы предоставить удобный опыт входа, зоомагазин решает использовать OpenID Connect для реализации единого входа (SSO).
-
ID-токен: Клиенты могут использовать свои учетные данные от других сервисов, поддерживающих OpenID Connect (например, аккаунты в социальных сетях), для входа. После успешного входа, поставщик OpenID Connect выдаст клиенту ID-токен. Этот токен содержит информацию о личности клиента и зашифрован и подписан.
-
Кросс-сервисная аутентификация: Если клиент позже посетит другие сервисы зоомагазина (например, перейдет с сайта в приложение), он может напрямую использовать ранее полученный ID-токен для аутентификации, без необходимости повторного ввода имени пользователя и пароля. Это позволяет клиенту беспрепятственно переключаться между различными сервисами.
Применение OAuth в этом случае:
-
Авторизация стороннего приложения: Предположим, "Рай для питомцев" хочет сотрудничать с сторонним приложением под названием "Дневник питомца" и позволить клиентам синхронизировать записи о покупках товаров для питомцев и данные о здоровье питомцев из "Рая для питомцев" в "Дневник питомца".
-
Токен доступа: Для реализации этой функциональности, "Рай для питомцев" будет использовать OAuth для авторизации приложения "Дневник питомца" на доступ к данным клиента. После того как клиент согласится на авторизацию на сайте "Рая для питомцев", через процесс OAuth будет сгенерирован токен доступа, который позволяет приложению "Дневник питомца" получать доступ к конкретным данным клиента на "Рае для питомцев".
-
Защита данных пользователя: С помощью OAuth, учетные данные для входа клиента (имя пользователя и пароль) не будут напрямую раскрыты приложению "Дневник питомца", но будут безопасно переданы через токен доступа. Таким образом, даже если приложение "Дневник питомца" будет атаковано, злоумышленник не сможет напрямую получить учетные данные клиента.
Итог
В заключение, различия и ассоциации между OAuth и OpenID Connect можно резюмировать следующим образом.
-
Основа и расширение:
- OAuth — это фреймворк авторизации, который позволяет сторонним приложениям получать ограниченные права доступа без использования имени пользователя и пароля пользователя.
- OpenID Connect, с другой стороны, строится на основе OAuth 2.0 и расширяет его функциональность, добавляя уровень аутентификации.
-
Токены и аутентификация:
- В OAuth основное внимание уделяется авторизации, то есть разрешению приложениям получать доступ к ресурсам пользователя, в то время как OpenID Connect больше сосредоточен на аутентификации, то есть подтверждении личности пользователя.
- OpenID Connect вводит концепцию ID-токена, который представляет собой JSON Web Token (JWT), содержащий информацию о личности пользователя. Этот токен не только подтверждает личность пользователя, но также может включать информацию о профиле пользователя.
-
Сотрудничество:
- Когда приложению необходимо проверить личность пользователя и получить доступ к его ресурсам, OpenID Connect и OAuth могут работать вместе.
- Пользователь сначала аутентифицирует свою личность через OpenID Connect, получая ID-токен, а затем приложение может использовать этот токен и процесс OAuth для получения разрешения на доступ к ресурсам пользователя.
В заключение, OpenID Connect и OAuth — это два взаимодополняющих протокола аутентификации и авторизации, которые вместе предоставляют безопасное, гибкое и удобное для пользователя решение для аутентификации и авторизации в современных веб- и мобильных приложениях.
