Что такое OAuth?

OAuth, или Open Authorization, — это открытый стандарт, который позволяет давать сторонним приложениям доступ к вашим данным без передачи логина и пароля. Вместо паролей OAuth использует временные токены, которые подтверждают доступ от вашего имени.

Например, вы используете стороннее приложение Mailchimp, популярный инструмент для email-маркетинга, и хотите импортировать свои контакты из Google, чтобы собрать список рассылки. Вместо того чтобы вручную скачивать и загружать их, OAuth позволяет безопасно связать ваш аккаунт Google с Mailchimp и дать приложению ограниченный доступ к контактам без раскрытия пароля.

OAuth и OAuth 2.0: в чем разница?

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

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

ХарактеристикаOAuth 1.0 OAuth 2.0
Безопасность Использует криптографические подписи с общим секретным ключом для каждого запроса. Защищает от изменения запроса, но не от его перехвата.Использует шифрование HTTPS/TLS для безопасной сквозной передачи данных
Система токенов Тип токена без стандартного срока действияИспользует краткосрочные токены доступа и токены обновления для повышения безопасности
Проверка запросов Приложение и сервер должны генерировать совпадающие подписи, чтобы подтвердить запросTLS отвечает за шифрование и проверку запросов
Потоки авторизации Единый сценарий для всех случаевНесколько сценариев авторизации (веб, мобильные приложения, сервер-сервер)
Сложность реализации Реализация усложнена требованиями к криптографическим подписямУпрощённая реализация благодаря использованию HTTPS
Современное использование Менее распространено в современных приложенияхОтраслевой стандарт для современных приложений
Компромисс безопасности Дополнительный уровень защиты за счёт подписей, но более сложная реализацияЗащита TLS, более простая корректная реализация
Рекомендуется дляУстаревшие системы с проверкой подписи Большинство современных приложений и API

OAuth и OAuth 2.0 остаются рабочими решениями, но в большинстве случаев предпочтение отдают именно OAuth 2.0. Его проще внедрить, и он широко используется в современных приложениях.

Как работает OAuth

Давайте разберём, как именно в OAuth 2.0 работает поток авторизационного кода (Authorization Code Grant).

  1. Пользователь инициирует авторизацию: Пользователь хочет предоставить стороннему приложению доступ к своим данным, размещённым на сервере. Обычно процесс запускается нажатием кнопки «Войти через Google» или «Подключиться к GitHub» в приложении.
  2. Клиент запрашивает авторизацию: Приложение перенаправляет пользователя на страницу авторизации сервиса. В запросе указываются параметры: client_id, redirect_uri, response_type=code, scope, state (для защиты от CSRF). Пользователь может пройти аутентификацию (если ещё не вошёл в систему) и подтвердить или отклонить запрашиваемый доступ.
  3. Разрешение предоставлено: Если пользователь одобряет запрос, сервер авторизации перенаправляет браузер обратно на redirect_uri. Код авторизации включен в URL вместе с параметром state. Приложение проверяет этот параметр, чтобы убедиться, что запрос не был изменён или перехвачен.
  4. Клиент запрашивает токен доступа: Приложение отправляет запрос на сервер токенов, чтобы обменять код авторизации на токены. Этот запрос должен включать: authorization_code, client_id, client_secret (если применимо), redirect_uri (должен совпадать с исходным запросом) и grant_type=authorization_code.
  5. Клиент получает токены доступа и обновления: После успешной проверки сервер выдаёт приложению два токена: токен доступа, который используется для работы с API от имени пользователя, и токен обновления, который позволяет получать новые токены доступа, когда срок действия текущего заканчивается. Приложение сохраняет эти токены в защищённом виде и применяет токен доступа при обращении к API.
  6. Клиент использует токен обновления: Когда срок действия токена доступа заканчивается, приложение может получить новый, отправив запрос с токеном обновления на конечную точку сервера токенов. В запросе указываются: client_id, client_secret, refresh_token, и grant_type=refresh_token.

Преимущества OAuth

OAuth даёт несколько преимуществ: снижает риск кражи учётных данных, делает работу удобнее и позволяет использовать единый вход (SSO).

Уменьшает риск кражи или неправомерного использования учетных данных

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

Удобство использования

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

Поддержка единого входа (SSO)

OAuth позволяет использовать единый вход (SSO): пользователь один раз входит через доверенного поставщика и затем может работать с разными приложениями без повторного ввода пароля. Пока пользователь остаётся в системе, он может без дополнительных действий пользоваться другими приложениями, связанными с этой же учётной записью. Например, войдя в Google, пользователь получает доступ к приложениям, которые используют Google для аутентификации.

Недостатки OAuth

Несмотря на все преимущества, OAuth несет и определенные риски безопасности. Токены могут быть скомпрометированы при ненадежном хранении или передаче, а пользователи по-прежнему остаются уязвимыми для фишинговых атак.

Токены могут быть скомпрометированы, если их не хранить в безопасности

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

Токены могут быть скомпрометированы, если они не передаются безопасным образом

Если токены отправляются по незащищённому соединению, например через HTTP вместо HTTPS, их может перехватить злоумышленник с помощью атаки посредника (MITM). Скомпрометированный токен позволяет получить несанкционированный доступ к ресурсам пользователя.

Подверженность фишинговым атакам

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

Купить сейчас