Начиная с высокого уровня, OAuth НетдаAPIили Служить:этода Авторизоватьизоткрытьстандартный,Любой может это реализовать.
Точнее, OAuth — это стандарт, который приложения могут использовать для предоставления «безопасного делегированного доступа» клиентским приложениям. OAuth работает через HTTPS и использует токены доступа вместо учетных данных для авторизации устройств, API, серверов и приложений.
OAuth Есть две версии:OAuth 1.0aиOAuth 2.0。Эти нормы взаимносовершенно другой,Нет能一起使用:это们之间Обратная совместимость отсутствует.
какой из них более популярен?Хороший вопрос!сейчас,Форма OAuth 2.0 OAuth. так что с этого момента,Каждыйкогда Я сказал“OAuth”час,я обада在谈论 OAuth 2.0 — потому что вы, вероятно, будете использовать именно ее.
OAuth был создан как ответ на режим прямой аутентификации. Этот режим известен базовой аутентификацией HTTP, которая запрашивает у пользователя имя пользователя и пароль. Базовая аутентификация по-прежнему используется в качестве исходной формы аутентификации API для серверных приложений: вместо отправки имени пользователя и пароля на сервер при каждом запросе пользователь отправляет идентификатор ключа API и пароль. До появления OAuth веб-сайты предлагали вам ввести имя пользователя и пароль непосредственно в форму, а затем входили в ваши данные (например, в вашу учетную запись Gmail) под вашим именем. Это часто называют криптографическим антипаттерном.
Чтобы улучшить систему сети, были созданы федеративные удостоверения для единого входа (SSO). В этом случае конечный пользователь обращается к своему поставщику удостоверений, который генерирует криптографически подписанный токен и передает его приложению для аутентификации пользователя. Приложение доверяет поставщику удостоверений. Пока эти доверительные отношения применимы к подписанному утверждению, все в порядке. На изображении ниже показано, как это работает.
Федеративные удостоверения известны как SAML 2.0, стандарт OASIS, выпущенный 15 марта 2005 года. Это большая спецификация, но двумя основными компонентами являются ее протокол запроса аутентификации (также известный как Web SSO) и способ упаковки атрибутов идентификации и их подписи, называемый утверждениями SAML.
SAML — это, по сути, сеансовый файл cookie в вашем браузере, который позволяет вам получить доступ к веб-приложению. Он ограничен в типах профилей устройств и сценариях, которые вы можете использовать вне веб-браузера.
Когда в 2005 году был запущен SAML 2.0, это имело смысл. Однако с тех пор многое изменилось. Теперь у нас есть современные веб-платформы и платформы для разработки собственных приложений. Существуют одностраничные приложения (SPA), такие как Gmail/Google Inbox, Facebook и Twitter. Они ведут себя иначе, чем ваше традиционное веб-приложение, поскольку выполняют AJAX (фоновые HTTP-вызовы) к API. Мобильные телефоны также выполняют вызовы API, как и телевизоры, игровые консоли и устройства Интернета вещей. SAML SSO не особенно хорош в этом.
Способ создания API также сильно изменился. В 2005 году люди инвестировали в WS-* для создания веб-сервисов. Сегодня большинство разработчиков перешли на REST и API без сохранения состояния. Проще говоря, REST — это HTTP-команда, которая передает пакеты JSON по сети.
Разработчики создают множество API. Экономика API — это распространенное модное словечко, которое сегодня можно услышать в залах заседаний. Компаниям необходимо защитить свои REST API таким образом, чтобы обеспечить доступ к ним многим устройствам. Раньше вы вводили каталог своего имени пользователя и пароля, и приложение автоматически входило в систему. Это создает проблему делегирования.
«Как я могу разрешить приложению доступ к моим данным, не сообщая ему пароль?»
Если вы когда-либо видели одно из приведенных ниже диалоговых окон, мы говорим именно об этом. Это приложение, которое спрашивает, может ли оно получить доступ к данным от вашего имени.
Это ОАут.
OAuth — это платформа делегированной авторизации для REST/API. Это позволяет приложениям получать ограниченный доступ (объем) к пользовательским данным без раскрытия пароля пользователя. Он отделяет аутентификацию от авторизации и поддерживает несколько вариантов использования, учитывающих различные возможности устройства. Он поддерживает межсерверные приложения, браузерные приложения, мобильные/родные приложения, а также консоли/телевизоры.
Вы можете думать об этом как о ключе-карте отеля, но для приложения. Если у вас есть ключ-карта отеля, вы можете войти в свой номер. Как получить ключ-карту от отеля? Чтобы получить его, вам необходимо пройти аутентификацию на стойке регистрации. После аутентификации и получения карты-ключа вы сможете получить доступ к ресурсам на всей территории отеля.
Проще говоря, OAuth — это:
OAuth построен на следующих основных компонентах:
Область — это то, что вы видите на экране авторизации, когда приложение запрашивает разрешение. Это пакеты разрешений, которые требуются клиенту при запросе токена. Они кодируются разработчиком приложения при написании приложения.
Область действия отделяет решения политики авторизации от исполнения. Это первый ключевой аспект OAuth. Разрешения являются наиболее важными. Они не скрыты за прикладным уровнем, который вам придется реконструировать. Обычно они перечислены в документации API: Вот области, необходимые для этого приложения.
OAuth — это решение масштаба Интернета, поскольку оно предназначено для каждого приложения. Обычно вы сможете войти в панель управления, чтобы просмотреть приложения, к которым вы предоставили доступ, и отозвать согласие.
Поток OAuthсерединаизучастникиследующее:
Владелец ресурса — это роль, которая может меняться с использованием разных учетных данных. Это может быть конечный пользователь или компания.
Клиенты могут быть публичными и конфиденциальными. Между ними существует значительная разница в номенклатуре OAuth. Секретным клиентам можно доверить хранение секретов. Они не запускаются на настольных компьютерах и не распространяются через магазины приложений. Их невозможно перепроектировать и получить ключ. Они работают в защищенной зоне, недоступной для конечных пользователей.
Публичными клиентами являются браузеры, мобильные приложения и устройства IoT.
Регистрация клиента также является ключевым компонентом OAuth. Это похоже на DMV для OAuth. Вам необходимо получить лицензию для вашего приложения. Вот так логотип вашего приложения будет выглядеть в диалоге авторизации.
Токен доступа — это то, что клиент использует для доступа к серверу ресурсов (API). Им суждено быть недолговечными. Думайте о них в часах и минутах, а не в днях и месяцах. Вам не нужен конфиденциальный клиент для получения токена доступа. Вы можете получить токен доступа через общедоступный клиент. Они предназначены для оптимизации для решения проблем масштаба Интернета. Поскольку эти токены недолговечны и масштабируются, их нельзя отозвать, вам просто нужно дождаться истечения срока их действия.
Другой токен — это токен обновления. Это гораздо дольше; дни, месяцы, годы. Это можно использовать для получения новых токенов. Чтобы получить токен обновления, приложениям обычно требуется проверенный конфиденциальный клиент.
Токены обновления могут быть отозваны. Когда вы отзываете доступ приложения на панели мониторинга, вы прекращаете действие его токена обновления. Это позволяет вам заставить клиентов менять секреты. Вы используете токен обновления для получения нового токена доступа, а токен доступа обеспечивает доступ ко всем ресурсам API в сети. Каждый раз, когда вы обновляете свой токен доступа, вы получаете новый токен с криптографической подписью. Ротация ключей встроена в систему.
OAuth Спецификация не определяет, что такое токен. Это может быть любой формат, который вы хотите. Однако обычно вы хотите, чтобы эти токены были JSON Web жетон(стандартный)。суммируя,JWT (произносится как «джот») — это безопасный и надежный метод аутентификации. JWT Позволяет подписывать информацию (так называемую инструкцию) цифровой подписью и проверять ее позже с помощью секретного ключа подписи. узнать о JWT из Подробнее,ВидетьA Beginner's Guide to JWTs in Java。
Токен извлекается из конечной точки на сервере авторизации. Двумя основными конечными точками являются конечная точка авторизации и конечная точка токена. Они разделены для разных случаев использования. Конечная точка авторизации — это место, где вы получаете согласие и авторизацию от пользователя. Это вернет разрешение на авторизацию, указывающее, что пользователь согласился на это. Затем передайте авторизацию конечной точке токена. Конечная точка токена обрабатывает авторизацию и говорит: «Отлично, вот ваш токен обновления и токен доступа».
Вы можете использовать токен доступа для доступа к API. По истечении срока его действия вам придется использовать токен обновления, чтобы вернуться к конечной точке токена и получить новый токен доступа.
Обратной стороной является то, что это вызывает много разногласий среди разработчиков. Одна из самых больших проблем с OAuth для разработчиков заключается в том, что вам приходится управлять токенами обновления. Вы передаете управление состоянием каждому разработчику клиента. Вы получаете преимущество от ротации ключей, но только что причинили много боли разработчикам. Вот почему разработчики любят ключи API. Они просто копируют/вставляют их, помещают в текстовый файл, и все готово. Ключи API хороши для разработчиков, но плохи для безопасности.
Здесь есть проблема с оплатой за игру. Позвольте разработчикам выполнять Поток OAuth повышает безопасность, но также создает больше проблем. Инструментарий и платформа имеют возможность упростить работу и помочь руководить управлением токенами. Счастливая дата, OAuth В наши дни он достаточно устоялся, и ваш любимый язык или фреймворк, вероятно, имеет инструменты, упрощающие работу.
Мы немного поговорили о типах клиентов, типах токенов, конечных точках сервера авторизации и о том, как мы передаем их на сервер ресурсов. Я упомянул два разных потока: получение авторизации и получение токена. Это не обязательно должно происходить на одном и том же канале. Внешний канал осуществляется через браузер. Браузер перенаправляет пользователя на сервер авторизации, и пользователь соглашается. Это происходит в браузере пользователя. После того как пользователь авторизован и передан приложению, клиентскому приложению больше не нужно использовать браузер для завершения Поток OAuthПриходитьполучать Токен.
Токен предназначен для использования клиентским приложением, чтобы оно могло получить доступ к ресурсам от вашего имени. Мы называем это обратным каналом. Обратный канал — это HTTP-вызов напрямую от клиентского приложения к серверу ресурсов в обмен на токен авторизации. Эти каналы используются для разных потоков в зависимости от возможностей вашего устройства.
Например, поток внешнего канала для авторизации пользовательского агента может выглядеть следующим образом:
Существует также вариант этого процесса, называемый неявным процессом. Мы вернемся к этому через минуту.
get https://accounts.google.com/o/oauth2/auth?scope=gmail.insert gmail.send
&redirect_uri=https://app.example.com/oauth2/callback
&response_type=code&client_id=812741506391
&state=af0ifjsldkj
Это запрос GET с набором параметров запроса (для примера это не URL-адрес). Область действия исходит из API Gmail. redirect_uri — URL-адрес, на который клиентскому приложению должно быть возвращено разрешение на авторизацию. Оно должно соответствовать значению, полученному в процессе регистрации клиента (в DMV). Вы не хотите, чтобы авторизация возвращалась к иностранным приложениям. Типы ответов различаются в зависимости от потока OAuth. Идентификатор клиента также получается в процессе регистрации. Состояние — это флаг безопасности, аналогичный XRSF. Чтобы узнать больше о XRSF
HTTP/1.1 302 Found
Location: https://app.example.com/oauth2/callback?
code=MsCeLvIaQm6bTrgtp7&state=af0ifjsldkj
возвращатьсяcode
изда Авторизовать授予,state
да为了确保это Нетдаподделкаиз,И из того же запроса.
После завершения работы переднего канала происходит поток обратного канала, в котором код авторизации обменивается на токен доступа.
Клиентское приложение отправляет запрос токена доступа в конечную точку токена на сервере авторизации, используя конфиденциальные учетные данные клиента и идентификатор клиента. Этот процесс предоставляет код авторизации в обмен на токен доступа и (необязательно) токен обновления. Клиенты используют токены доступа для доступа к защищенным ресурсам.
Вот как это выглядит в необработанном HTTP:
Request
POST /oauth2/v3/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=MsCeLvIaQm6bTrgtp7&client_id=812741506391&client_secret={client_secret}&redirect_uri=https://app.example.com/oauth2/callback&grant_type=authorization_code
The grant_type is the extensibility part of OAuth. It's an authorization code from a precomputed perspective. It opens up the flexibility to have different ways to describe these grants. This is the most common type of OAuth flow.
Response
{
"access_token": "2YotnFZFEjr1zCsicMWpAA",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA"
}
Ответ — JSON. Вы можете использовать токены пассивно или активно. Проактивность — это наличие таймера в вашем клиенте. Реактивный — это отловить ошибку и попытаться получить новый токен.
После получения доступа к жетону,Вы можете идентифицироватьпроверятьзаголовоксередина使用доступжетон(Использовать какtoken_type
префикс)Приходить发出受保护из Запрос ресурса。
curl -H "Authorization: Bearer 2YotnFZFEjr1zCsicMWpAA" \
https://www.googleapis.com/gmail/v1/users/1444587525/messages
Итак, теперь у вас есть передний канал, задний канал, разные конечные точки и разные клиенты. Вам придется смешивать и сопоставлять их для разных случаев использования. Это увеличивает сложность OAuth и может сбить с толку.
Первый скончалсядачто мы сказалиизнеявный поток。Причина, по которой это называетсянеявный поток, да потому что все коммуникации дапроходить через браузер под руководством. Нет бэкэнд-сервера для выкупа лицензий на доступ к жетону. СПА является хорошим примером варианта использования этого процесса. Этот процесс также известен как 2 Legged OAuth。
Неявная потоковая передача оптимизирована для общедоступных клиентов, работающих только в браузере. Токен доступа возвращается непосредственно из запроса авторизации (только внешний канал). Обычно он не поддерживает токены обновления. Предполагается, что владелец ресурса и общедоступный клиент находятся на одном устройстве. Поскольку все происходит в браузере, он наиболее уязвим для угроз безопасности.
Золотой стандарт – это Authorization Code Flow,это同час使用前通道изадний канал。Это我们在本文середина讨论最多изсодержание。клиентприложение使用前端通道流Приходитьполучать Авторизовать码授予。клиентприложение使用反向通道将Авторизовать代码授予交换доступжетон(и необязательноизобновитьжетон)。это假定владелец Приложение ресурсиклиент доступно на разных устройствах. Это наиболее безопасный процесс, поскольку вы можете активировать авторизацию, предоставленную удостоверением клиентаруководства, и жетон никогда не будет передавать пароль пользовательского агента. Мало того, что существуют неявные коды авторизации, вы также можете использовать OAuth Выполните другие процессы. Аналогично, OAuth Больше похоже на каркас.
Сценарий межсерверного взаимодействия,Вы можете использоватьClient Credential Flow。в этом случае,клиентское приложение и КОНФИДЕНЦИАЛЬНЫЙ клиент,он работает независимо,Не представляет пользователя. Это скорее тип и сценарий сервисной учетной записи. Для завершения всего процесса вам нужны только учетные данные клиента. Это обратный канал,Получите доступ к токену только с использованием учетных данных клиента. Он поддерживает общий секрет или утверждения, а также использование симметричных или асимметричных ключей, подписанных и учетных данных клиента.
Алгоритм симметричного ключа — это алгоритм шифрования, который может расшифровать что угодно, если у вас есть пароль. Это часто встречается при защите файлов PDF или .zip.
Криптография с открытым ключом или асимметричная криптография — это любая криптографическая система, в которой используются пары ключей: открытый ключ и закрытый ключ. Открытый ключ может прочитать кто угодно, закрытый ключ является священным для владельца. Это позволяет обеспечить безопасность данных без совместного использования паролей.
Есть еще один, называетсяResource Owner Password Flow изустаревший режим。Это то же самое, что использовать имя пользователяипарольизпрямая идентичностьпроверять Решения очень похожи,Поэтому его использование не рекомендуется. Это локальные приложения с именем пользователя и паролем (например, настольные приложения) традиционного типа авторизации. В этом процессе,Вы отправляете свой логин и пароль в клиентское приложение,Затем он возвращает доступ к Токену с сервера авторизации. Обычно он не поддерживает обновление жетона.,и предположимвладелец ресурсы публичного клиента на том же устройстве. когда у вас есть тот, который вы просто хотите использовать OAuth из API, но вам придется иметь дело с клиентами старой школы.
OAuth Недавно добавленоиздаAssertion Flow,это类似Вклиент Поток учетных данных。添加этотсодержаниедаоткрыть федерациюизидея。этотпроцесс允许Авторизовать Служить器信任Приходить自第三方(Например SAML IdP) из предоставленного разрешения. Сервер авторизации доверяет поставщику удостоверений. Это утверждение использует В для доступа к Токену из конечной точки получения. Это полезно для В-инвестиций. SAML или SAML сопутствующие технологии и позволяют им взаимодействовать с OAuth Очень полезно для интегрированных компаний. потому что SAML утверждениедакороткийиз,Так что в этом процессжетоне нет обновления,Вы должны продолжать получать Токен доступа каждый раз, когда истечет срок действия утверждения.
Нет здесь OAuth в спецификации,даDevice Flow。Нет веб-браузера,Только ТВ и прочие контроллеры. Код пользователя да, возвращенный из запроса на авторизацию,долженпроходить Доступ через браузеризна устройствеиз URL чтобы активировать авторизацию. Клиентское приложение использует поток обратного канала для запроса доступа и необязательного обновления разрешения авторизации. Также очень популярен CLI клиент Добро пожаловать.
Мы представили шесть различных процессов с использованием разных типов участников. Они необходимы,Из-за возможностей клиента,Как нам нужно получить согласие клиента,кто согласен,Это дает OAuth Добавляет много сложности.
Когда люди спрашивают тебя, поддерживаешь ли ты OAuth час,Вы должны уточнить их требования. Они спрашивают вас, поддерживаете ли вы все шесть процессов.,Кроме того, да поддерживает только основной процесс? Между всеми различными исходными процессами имеется множество детализации.
OAuth из имеет широкий спектр применения. Используйте неявный поток, много редиректов и много места для ошибок. Есть много людей, пытающихся использовать различные приложения. OAuth, если вы не следуете рекомендациям из Web Security 101 Руководство, это легко сделать. Например:
state
Параметры, используемые вместе для обеспечения целостности потока.В общем, да OAuth Наибольшие жалобы исходят от сотрудников службы безопасности. это связано с Bearer Токены связаны между собой, они могут быть похожи на сеансы. cookie Прошло также. Вы можете передать его, и все готово, он не будет криптографически привязан к пользователю. использовать JWT Полезно, потому что их нельзя подделать. Но, в конечном итоге, JWT Толькодастрока символов,因этот可к轻松копироватьэто们并在заголовоксередина使用Authorization
。
Для решения проблемы псевдоаутентификации используется комбинация OAuth 2.0、Facebook Connect и SAML 2.0 из最佳部分Приходить创建OpenID Connect。id_token
OpenID Connect (OIDC) Используйте новыеизклиентзнакиUserInfo
получать Атрибуты пользователяиз端点扩展 OAuth 2.0. и SAML Разное, OIDC предоставляет наборстандартныйиз Область действия удостоверенияизаявление。Примеры включают в себя:profile
、email
、address
иphone
。
OIDC изCreate да для того, чтобы сделать вещи полностью динамичными для достижения Internet Масштабируемость. Больше не нужно быть похожим SAML Таким образом, скачайте метаданные вместе. Полезное В динамическом объединении со встроенной регистрацией, Обнаружитьиметаданные. Вы можете ввести свой адрес электронной почты, и он будет динамически обнаруживать ваш адрес. OIDC поставщика, динамически загружает метаданные, динамически знает, какой сертификат он будет использовать, и позволяет BYOI (Принеси свою индивидуальность). Он поддерживает предприятия с высоким уровнем безопасности и критически важными SAML Варианты использования.
OIDC прославился благодаря Google и Microsoft, которые были одними из первых его последователей.
Request
GET https://accounts.google.com/o/oauth2/auth?
scope= openid email &
redirect_uri=https://app.example.com/oauth2/callback&
response_type=code&
client_id=812741506391&
state=af0ifjsldkj
Response
HTTP/1.1 302 Found
Location: https://app.example.com/oauth2/callback?
code=MsCeLvIaQm6bTrgtp7&state=af0ifjsldkj
жетон ответ на предоставление авторизации содержит идентификатор Токен.
Request:
POST /oauth2/v3/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
code=MsCeLvIaQm6bTrgtp7&client_id=812741506391&
client_secret={client_secret}&
redirect_uri=https://app.example.com/oauth2/callback&
grant_type=authorization_code
Response:
{
"access_token": "2YotnFZFEjr1zCsicMWpAA",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "tGzv3JOkF0XG5Qx2TlKWIA",
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ..."
}
Вы можете увидеть это в OAuth хорошо выложить сверху, чтобы ID Токен возвращается как структурированный токен. ИДЕНТИФИКАТОР Токен JSON Web жетон (ДЖВТ). JWT (он же «джот») основан на XML из огромного SAML Утверждения намного меньше и могут эффективно передаваться между различными устройствами. JWT Содержит три части: заголовок、текстизнак。заголовок, указывающий, какой алгоритм использовать дляруководитьзнак,заявление в тексте,и подписался в подписи.
Процесс Open ID Connect включает в себя следующие шаги:
OAuth 2.0 это метод, используемый для делегированного доступа API из Структура авторизации. это предполагает запрос владельца ресурс Авторизация/Согласие из ОБЛАСТИ изклиента. Авторизация предоставляет доступ к обмену жетонами и обновление жетонов (зависит от Впроцесса). Существует несколько процессов, которые могут решить различные сценарии авторизации исходных клиентов. JWT Доступные серверы авторизации на сервере Между ресурсамиизструктурированный Токен.
OAuth имеет очень большую зону безопасности. Обязательно используйте безопасный набор инструментов и проверяйте все вводимые данные!
OAuth Это не протокол аутентификации. OpenID Connect Расширено для схем аутентификации OAuth 2.0, часто называемый «с фигурными скобками из SAML”。