Заявка на услуги DST
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
В этой статье специалисты компании DST Global рассмотрят историю OAuth 2.0, прежде чем обсудить, как он работает, преимущества, проблемы и лучшие практики работы с OAuth 2.0.
OAuth 2.0 — это платформа авторизации, которая позволяет пользователям безопасно обмениваться данными между различными приложениями. Это отраслевой стандарт, который решает проблемы безопасности API, связанные с обменом учетными данными пользователей, обеспечивая при этом простые и четко определенные потоки авторизации для веб-приложений, мобильных, настольных приложений и приложений IoT.
Какова история OAuth 2.0?
Каждый день миллионы людей взаимодействуют с несколькими приложениями и обмениваются данными между ними. Например, тот, кто использует фитнес-приложение для отслеживания своих ежедневных тренировок, может захотеть начать использовать новое приложение для планирования питания, чтобы отслеживать потребление питательных веществ и калорий. Приложение для планирования питания может попросить пользователя поделиться своими данными из фитнес-приложения, чтобы создать более индивидуальный подход. Хотя этот тип интеграции имеет множество преимуществ, он также имеет несколько предостережений по безопасности:
- Раскрытие учетных данных пользователя: до появления OAuth пользователю необходимо было сообщить свое имя пользователя и пароль для фитнес-приложения приложению для планирования питания, что представляло бы значительный риск для безопасности. Например, приложение для планирования питания может хранить учетные данные пользователя небезопасным способом, что делает их уязвимыми в случае взлома.
- Область доступа: до появления OAuth приложение для планирования питания могло иметь доступ к данным, которыми пользователь на самом деле не хотел делиться. Например, энтузиаст фитнеса в этом примере может захотеть поделиться с приложением для планирования питания историей своих тренировок, но не своим возрастом, адресом электронной почты, родом занятий или местоположением.
- Нет возможности отозвать доступ. До появления OAuth пользователь не мог легко ограничить или отозвать доступ приложения для планирования питания к своим фитнес-данным. Хотя пользователь может решить изменить пароль своего фитнес-приложения, это повлияет на все сторонние приложения, которые он ранее авторизовал.
OAuth, который зародился как усилия сообщества в 2007 году и в настоящее время разрабатывается и поддерживается Инженерной группой Интернета (IETF), решил эти проблемы с помощью механизма авторизации на основе токенов. Введя токены в качестве средства предоставления доступа, OAuth устранил необходимость для пользователей передавать свои фактические учетные данные сторонним приложениям. Это также позволяет пользователям определять конкретные области доступа при предоставлении разрешения, гарантируя, что приложения получат доступ только к тем ресурсам, которые им необходимы. Кроме того, OAuth позволяет пользователям явно разрешать приложениям определенные действия и отзывать доступ в любое время, давая им возможность взять на себя ответственность за свои данные и конфиденциальность.
Как работает OAuth 2.0?
Прежде чем вы сможете понять, как работает OAuth 2.0, разработчики DST Global считают что вы должны сначала понять четыре конкретные роли, которые участвуют в рабочем процессе OAuth 2.0. Эти роли:
- Владелец ресурса: это пользователь, который предоставляет третьим лицам доступ к своим данным.
- Клиент: это стороннее приложение, которое запрашивает доступ к данным владельца ресурса. Когда владелец ресурса предоставляет доступ, клиент получает токен доступа, который можно использовать для запроса ресурсов в пределах предоставленной области.
- Сервер авторизации. Сервер авторизации действует как посредник между клиентом, владельцем ресурса и сервером ресурсов, выдавая токены доступа клиенту после того, как владелец ресурса успешно авторизует запрос.
- Сервер ресурсов: это сервер, на котором размещаются защищенные ресурсы. Он отвечает за прием и ответ на запросы на доступ к защищенным ресурсам с использованием токена доступа.
OAuth 2.0 позволяет владельцу ресурса (т. е. пользователю) предоставить клиенту (т. е. стороннему приложению) доступ к своим данным без необходимости сообщать свои учетные данные. Вместо этого учетные данные передаются серверу авторизации, который выдает клиенту токен доступа. Затем клиент может использовать этот токен доступа для получения данных пользователя с сервера ресурсов.
Давайте рассмотрим, как это работает, на нашем примере из предыдущего раздела. В контексте OAuth новое приложение для планирования питания является клиентом; ему нужен доступ к данным пользователя из фитнес-приложения. Фитнес-приложение имеет как сервер ресурсов, так и сервер авторизации, который разрешает доступ к серверу ресурсов.
Поскольку приложение для планирования питания является клиентом, оно предоставляет пользователю возможность импортировать данные истории фитнеса из фитнес-приложения. Если пользователь решит продолжить, он будет перенаправлен в фитнес-приложение, где ему будет предложено ввести имя пользователя и пароль. Если пользователь успешно войдет в фитнес-приложение, он увидит экран, на котором сможет просмотреть данные, к которым клиент хотел бы получить доступ. Если пользователь соглашается на запрошенную область, он авторизует запрос. Затем пользователь будет перенаправлен обратно в приложение для планирования питания, где теперь будет видна его история тренировок из фитнес-приложения.
Вот пошаговая разбивка всего, что происходит под капотом:
1. Клиент (приложение для планирования питания) запрашивает у пользователя доступ к его ресурсам на сервере ресурсов фитнес-приложения.
2. Пользователь предоставляет доступ клиенту через сервер авторизации, войдя в фитнес-приложение под своими учетными данными. Эти учетные данные не передаются клиенту. Вместо этого генерируется код авторизации, который передается клиенту.
3. Клиент использует этот код авторизации для запроса токена доступа от конечной точки, предоставленной сервером авторизации.
4. Сервер авторизации генерирует и возвращает токен доступа, который клиент может использовать для доступа к ресурсам пользователя на сервере ресурсов.
5. Клиент отправляет токен доступа на сервер ресурсов, чтобы запросить доступ к ресурсам пользователя.
6. Сервер ресурсов проверяет токен доступа на сервере авторизации. Если токен действителен, он предоставляет клиенту доступ к ресурсам пользователя.
В чем разница между токенами доступа и токенами обновления в OAuth?
Как обсуждалось выше, сервер авторизации предоставляет клиенту токен доступа после того, как пользователь авторизует запрос. Затем клиент использует этот токен доступа для получения данных пользователя с сервера ресурсов. Токены доступа могут храниться в разных форматах, наиболее распространенным из которых является формат JWT (JSON Web Token). Этот формат позволяет токену содержать зашифрованные данные, которые можно безопасно получить до истечения срока действия токена.
Токены доступа часто недолговечны, и поэтому их необходимо повторно генерировать по истечении срока действия. Токены обновления используются для получения новых токенов доступа и часто имеют более длительный срок действия, чем токены доступа. Однако не все поставщики OAuth выдают токены обновления.
Что такое разрешение на авторизацию и каковы его ключевые типы?
Предоставление авторизации — это учетные данные, представляющие согласие пользователя предоставить клиенту доступ к его защищенным ресурсам на сервере ресурсов. Как только клиент получит грант, его можно обменять на токен доступа. OAuth 2.0 определяет четыре основных типа авторизации:
Предоставление кода авторизации
В приведенном выше примере мы упомянули, что сервер авторизации генерирует код и передает его клиенту после успешного входа пользователя в систему. Этот код, известный как «код авторизации», является наиболее безопасным и распространенным типом предоставления авторизации. Это включает в себя двухэтапный процесс. Сначала клиент перенаправляет пользователя на сервер авторизации, где пользователь входит в систему и предоставляет разрешение. Затем сервер авторизации предоставляет клиенту код авторизации. На втором этапе клиент обменивает код авторизации на токен доступа и, при необходимости, токен обновления.
Неявный грант
Неявное предоставление предназначено для браузерных приложений, таких как одностраничные веб-приложения. В этом потоке токен доступа возвращается непосредственно клиенту из конечной точки авторизации, минуя обмен кодом авторизации. Это упрощает поток, но делает токен более уязвимым для воздействия, поскольку он может быть зарегистрирован в истории браузера или перехвачен злоумышленниками. Поэтому он не рекомендуется и объявлен устаревшим в OAuth 2.0.
Предоставление учетных данных пароля владельца ресурса (ROPC)
В этом типе предоставления учетные данные владельца ресурса передаются непосредственно клиенту, и клиент использует эти учетные данные для получения токена доступа с сервера авторизации каждый раз, когда он необходим. Поскольку ROPC предполагает прямой обмен учетными данными пользователя, он менее безопасен и его следует использовать только в том случае, если владелец ресурса имеет высокий уровень доверия к клиенту.
Предоставление учетных данных клиента
Этот тип предоставления используется для получения токена доступа, когда клиентское приложение (часто серверное приложение) запрашивает доступ к своим собственным ресурсам. Это целесообразно, когда клиентское приложение является владельцем ресурса и ему необходим доступ к защищенному ресурсу, которым оно владеет или управляет.
Каковы преимущества OAuth 2.0?
OAuth 2.0 предлагает множество преимуществ, которые сделали его золотым стандартом авторизации в крупных технологических компаниях, приложениях для социальных сетей, финансовых приложениях и т. д. Эти преимущества включают в себя:
- Упрощенный процесс авторизации. OAuth 2.0 использует простой процесс авторизации, который легко реализовать, что делает его более доступным для разработчиков. Для авторизации он использует токены доступа, что делает его масштабируемым и производительным в крупномасштабных системах.
- Несколько типов токенов доступа. OAuth 2.0 допускает использование различных типов токенов доступа, что позволяет реализовать различные механизмы безопасности и время жизни токенов в зависимости от конкретных требований приложений.
- Пользовательский контроль: OAuth 2.0 дает пользователям контроль над своими данными и уровнем доступа, предоставляемого клиентским приложениям. Пользователи могут выбирать, к каким ресурсам может получить доступ клиентское приложение, и могут отозвать доступ в любое время, повышая конфиденциальность и доверие пользователей.
- Стандартизация и широкое внедрение в отрасли. OAuth 2.0 получил широкое распространение среди крупных технологических компаний, платформ социальных сетей и поставщиков услуг, что сделало его отраслевым стандартом авторизации. Экосистема OAuth также включает в себя многочисленные библиотеки, инструменты и платформы, которые упрощают интеграцию и реализацию для разработчиков на различных языках программирования и платформах.
- Авторизация для API. OAuth 2.0 широко используется для защиты API, позволяя разработчикам предоставлять детальный контроль доступа к определенным ресурсам, обеспечивая при этом безопасность и соответствие требованиям.
Каковы рекомендации разработчиков DST Global по работе с OAuth 2.0?
При внедрении OAuth 2.0 важно придерживаться следующих рекомендаций, чтобы защитить ваше приложение и пользовательские данные:
- Используйте кратковременные токены доступа. Ограничение срока действия токенов доступа помогает сдержать ущерб в случае их компрометации. Токены обновления позволяют законным клиентам получать новые токены доступа без участия пользователя.
- Ограничить область действия токена. Токены доступа всегда должны иметь наименьшую область действия, необходимую для конкретной функциональности приложения.
- Защитите приложение от распространенных шаблонов атак. Важно принять адекватные меры для снижения уязвимости вашей системы к атакам. Например, использование параметра `state` при инициировании запроса на авторизацию и проверка возвращаемого состояния на соответствие исходному значению может помочь защититься от атак CSRF (подделка межсайтовых запросов). Вам также следует реализовать ограничение скорости, что поможет предотвратить атаки типа «отказ в обслуживании» (DoS).
- Безопасно обрабатывайте токены доступа: токены доступа должны отправляться в заголовке запроса, когда клиент запрашивает ресурс с сервера ресурсов. Они не должны храниться в виде файлов cookie или передаваться через параметры запроса. Кроме того, сервер авторизации должен включать поле заголовка ответа HTTP «Cache-Control» со значением «no-store» в любой ответ, содержащий токены, учетные данные или другую конфиденциальную информацию, а также поле заголовка ответа «Pragma» со значением «no-store». значение «без кэша».
- Разрешить пользователям отзывать доступ к своим данным. OAuth 2.0 разработан таким образом, что владелец ресурса имеет полный контроль над своими данными. Поэтому важно предоставить механизм отзыва токенов, чтобы пользователи могли блокировать нежелательный доступ.
- Предоставьте четкую документацию. Если вы предоставляете доступ OAuth к данным своих пользователей, крайне важно предоставить четкую, краткую и подробную документацию для всего процесса OAuth. Это поможет ускорить процесс адаптации и повысить уровень внедрения.
Каковы некоторые проблемы внедрения OAuth 2.0?
Хотя OAuth 2.0 предлагает множество преимуществ, он, тем не менее, создает ряд проблем, которые разработчики должны учитывать для обеспечения успешной реализации. Эти проблемы включают в себя:
- Сложность: OAuth 2.0 — это сложная структура авторизации, включающая множество компонентов и взаимодействий. Понимание этих компонентов может оказаться непростой задачей, особенно для разработчиков, впервые знакомых с протоколом. Например, реализация сервера авторизации OAuth 2.0 включает настройку различных конечных точек, областей и регистрации клиентов, что становится еще сложнее, когда имеется несколько клиентов и разные требования к контролю доступа.
- Безопасное управление токенами. Безопасность токенов необходима для успешной реализации OAuth, поскольку неправильное управление токенами может привести к утечке токенов или атакам путем внедрения. Реализаторам необходимо обрабатывать хранение токенов, истечение срока действия и отзыв токенов, обновление токенов и проверку использования токенов, и все это может быть сложно сделать правильно.
- Пользовательский опыт. Типичный пользовательский процесс для OAuth 2.0 включает несколько этапов, поэтому важно поддерживать плавный и интуитивно понятный пользовательский интерфейс, чтобы предотвратить отток пользователей. Это может быть непросто, особенно когда речь идет об обработке ошибок, разработке экранов согласия и работе с различными пользовательскими агентами (например, веб-браузерами и мобильными приложениями).
- Совместимость и взаимодействие: OAuth 2.0 получил широкое распространение, и существует множество доступных библиотек, платформ и реализаций. Тем не менее, обеспечение совместимости и взаимодействия между различными реализациями и поставщиками OAuth 2.0 может оказаться сложной задачей. Поэтому важно тщательно протестировать и проверить вашу реализацию на различных серверах авторизации и клиентских приложениях.
Наш специалист свяжется с вами, обсудит оптимальную стратегию сотрудничества,
поможет сформировать бизнес требования и рассчитает стоимость услуг.
Ижевск, ул. Воткинское шоссе, д. 170 Е, Технопарк Нобель, офис 1117
Задать вопрос по почте
OAuth 2.0 — используется для регистрации и входа пользователей на сайты с помощью соцсетей. А также для получения данных пользователей из соцсетей.
OpenID Connect — используется для аутентификации пользователей и позволят предоставить им доступ к своим закрытым данным на сайтах. Также OpenID Connect служит для реализации сложных сценариев взаимодействия в корпоративных SSO системах.
WebAuthn — используется для добавления на сайт возможности аутентификации с помощью внешнего физического ключа или отпечатка пальца.
Ну и сами выводы:
Очевидно, что современный сайт должен реализовать все возможные способы регистрации и авторизации, чтобы у пользователя был осознанный выбор.
Появилась возможность никогда не хранить пароль пользователя, чтобы не компрометировать свою репутацию, а хранить только логины и зашифрованные личные данные.
Имеет смысл отдать аутентификацию пользователей облачным платформам, таким как Facebook или Google, т.к. в них работают лучшие специалисты по безопасности, которые могут предусмотреть все нюансы безопасности.
Предлагаю с оптимизмом смотреть в будущее, т.к. протокол WebAuthn — реальный шанс избавится от парольного ада нашего времени!