Как работает OAuth 2.0 и OpenID Connect

Что такое оauth2.0?

После изучения доступных протоколов и технологий мы приняли решение о запуске системы Auth. Рамка OAuth2.0 является наиболее широко используемым стандартом авторизации.

Протокол обновлялся и изменялся в течение восьми лет с момента принятия стандарта в 2022 году. Из-за чрезмерного количества RFC создатели оригинального протокола приняли решение о создании OAuth 2.1 – документа, содержащего унифицированные изменения для него. В настоящее время он находится на стадии черновика.

R FC 6749 представляет OAuth в его самой последней итерации. Именно его мы и будем исследовать.

O Auth 2.0 – это структура для аутентификации.

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

В чем состоит особенность?

В чем же отличие?

Что такое grant?

Grant – это информация, которая показывает успешную авторизацию клиента владельцем ресурса и использование клиентом этой авторизации для получения маркера доступа.

Например, уведомление появляется, когда мы регистрируемся в Google или проходим аутентификацию в других местах с помощью Facebook и Twitter. Отображается ток-ен, который указывает на то, что какая-то служба хочет получить доступ к информации о вас или ваших ресурсах. Уведомление “Экран согласия” – так оно называется.

База данных получает ту же информацию, когда мы нажимаем “ОК”: информацию о том, что такой-то и такой-то пользователь предоставил такой-то доступ к такой-то и такой-то услуге. Идентификатор успешной аутентификации, например, строка из базы данных, отправляется клиенту.

Существует четыре метода получения гранта.

10 Как реализовать меж-доменную идентификацию?

Естественно, все это выгодно. Все хорошо до тех пор, пока работа ведется в одном веб-браузере. А как насчет сегодняшних реалий, когда у человека два мобильных телефона и один компьютер для работы?

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

Вычисление различных доменных ключей с возможностью обратного восстановления с помощью общего мастер-ключа.

Пользователь сможет использовать главный ключ M и один алгоритм для генерации одного и того же ключа K для домена D на одном устройстве. Почему? Потому что это действие будет выполнять браузер, а не пользователь.

Лучший сервис для пользователя.

Но максимальный риск

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

Не очень практично генерировать все ключи для всех доменов, используя один главный ключ. Во-вторых, что произойдет, если ключ домена будет украден? Что делать дальше, если вы хотите поделиться ключом домена с кем-то еще?

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

4 Как происходит идентификация клиентов сайтами?

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

Универсальность токенов для каждой пары:

Как функционирует домен пользователя Другой токен пользователя будет виден другому домену. Только если выполнение происходит в контексте целевого сайта (через IFRAME или IMG), он является текстом. Компоненты алгоритма защищены от XSS и SRF-атак пользовательскими токенами, обработанными через специальный процессор. Но это также оставляет открытой перспективу технологического программирования.

SSO

С его согласия он может использовать кросс-доменную идентификацию.


Токен

5 Как происходит авторизация клиентов сайтами?

Крайне важно понимать, что токен не предоставляет пользователю авторизацию на конкретном сайте. Однако, как уже было сказано, для него вы сейчас просто узнаваемый “аноним”.

Если сайт просит вас привязать свой токен, вы должны зарегистрироваться на этом сайте. Однако предлагаемый протокол делает это проще.

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

7 Авторизация на сайте глазами пользователя

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


Вместо фиксации ключа, пользователь может создать постоянный ключ для сайта и пройти там регистрацию. Анимированная иллюстрация:

Кроме того, процесс входа в систему значительно упрощается, если у пользователя есть постоянный ключ для сайта и зарегистрированный электронный адрес:

Когда пользователь генерирует мастер-ключ для сайта, протокол в этом случае функционирует. Здесь все просто.

Как исправить проблему, при которой вас невозможно идентифицировать на веб-сайтах других устройств

. Это показано в анимации ниже. Предполагается, что вы уже предоставили своим устройствам/браузерам доступ к мастер-ключу:


Для сайтов с двух-факторной авторизацией «узнавание» может выглядеть так:

Еще проще – это выход. Это так же просто, как нажать кнопку “Выход” в браузере:

Заголовок CSI-Token; Logout передается браузером при отправке запроса на любую страницу сайта методом HEAD.


Сервер, видя такой заголовок, делает Logout. Если это был фиксированный ключ, то сайт удаляет всю информацию о пользователе (более такой ключ никогда не появится). Если это был постоянный ключ, просто разрывает сессию.

8 Как происходит смена ключа сайта?

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

При изменении постоянного ключа сайта браузер отправляет сайту ссылку безопасности, информируя его о соответствующем изменении токена.

Каждый дополнительный запрос включает в себя ссылку на

заголовок

CSI-Token

с ключом

Changed-To

Такой запрос должен быть обработан веб-сайтом надлежащим образом. Кроме того, если этот маркер уже находится в его базе данных и может быть изменен или заменен, он должен произвести соответствующую замену. Чтобы это сработало, веб-сайт должен проинформировать браузер об успешном изменении маркера на своей стороне. Параметр: используется в заголовке ответа (Response Headers).

Успех в CSI-Token-Action

С указанием примененного токена.

Сайт имеет право отклонить попытку изменить токен по параметру (например, если в его базе нет токена с таким именем).

CSI-Token-Action: aborted.


До тех пор, пока браузер не получит заголовок CSI-Token-Action, он в каждый запрос к сайту в заголовок CSI-Token будет добавлять ключ Changed-To.

Это

Аналогия смены пароля пользователя.

9 Как реализуется кросс-доменная авторизация?

Традиционное междоменное разрешение на основе ARP

SSO

Какие преимущества она дает? В этой ситуации вам не нужно следить за паролями для многочисленных веб-сайтов. Нет необходимости заполнять длинные формы. Некоторые серверы авторизации требуют указать разрешения, которые система SSO предоставляет веб-сайту.


Но есть и недостатки.

В зависимости от поставщика выбирается ССО.

Вы не можете получить доступ к целевому веб-сайту, если сервер SSO не работает. Вы немедленно потеряете доступ ко всем веб-сайтам, если забудете свой пароль или ваша учетная запись будет взломана.

Работа веб-разработчика сложнее. Сначала необходимо создать учетную запись на сервере авторизации, получить ключи и ознакомиться с протоколом ().

SAMLOAuth

0 Алгоритм формирования ключа домена

Доменные ключи создаются всего двумя методами.


В последнем случае ключ домена вычисляется как:

где

$M_{key}$

– Домен, имя домена, для которого создается ключ, и 256-битный мастер-ключ.


Здесь и далее

HMAC

На основе 256-разрядной реализации хэш-функции

Оригинальная позиция главного ключа не подвергается опасности в случае компрометации или добровольного раскрытия ключа домена.

Пользователи могут управлять своими собственными учетными записями с помощью мастер-ключа.

Базовый ключ программы “мастер” должен быть изменен, если он был скомпрометирован (в результате взлома сайта), или если аналогичный токен не работает в программе “мастер”. Можно сгенерировать тот же “мастер”, но с дополнительной версией:

В следующем символе

$cup$

Конкатенация строк (массивов байт) будет применяться для операции конктерации строк.

1 Алгоритм вычисления исходного токена


Идентификационный токен пользователя вычисляется при каждом запросе любого ресурса домена. Для вычисления токена запроса берутся следующие данные:

Эта информация объединяется и хэшируется с помощью 256-битного SHA-2.

Подходящий токен выбирается на основе K-ключа домена инициатора запроса. Условия Отправитель = Получатель – Контекст должны быть выполнены для правильного обнаружения на целевом сайте.

Для предотвращения замораживания поле Context используется вместе с Protection.

XSSCSRF

– атак, а также от отслеживания пользователей.


Более подробные пояснения по правилам определения Sender / Recipient / Context будут даны ниже.

2 Алгоритм защиты токена при передаче

Оригинальный маркер клиента редко передается по сети. только при первом создании сеанса.

Токен является незарегистрированным.

После отправки ключа Change-To или Permanent сервер не примет ключ, который был сгенерирован с использованием случайного (не фиксированного) ключа. Чтобы узнать больше, см.

Вместе браузер и сервер генерируют пару случайных чисел под названием Salt, которая хэширует младшие 128 бит токена. Эти числа обмениваются между собой в соответствии с протоколом. Более подробную информацию см.


Таким образом, сервер сайта видит следующий токен:

где

$Hi(T_s)$

Старшие 128 бит,

$Lo(T_s)$

Младшие 128 бит исходного токена

$cup$

— конкатенация строк. При этом исходный токен двигается в сторону от основного.

$T_s$

Должен быть известен серверу.

Каждый раз, когда браузер посылает запрос на сервер, CSI-Salt должен меняться. Однако затраты в плане вычислительной мощности могут быть чрезмерными. Кроме того, это может удержать клиентов от одновременных запросов к серверу.

Его можно настроить в зависимости от частоты запросов или после 100 обращений, если есть ограничение по времени (менять CSI-Salt каждые 5 минут). В этом случае выбор остается за разработчиками браузера.

Когда CSI-Salt сохраняется в течение длительного периода времени, безопасность переданного токена ослабевает, что облегчает злоумышленнику возможность воспользоваться этим и отправить жертве несанкционированный запрос.

4 Правила формирования поля Context


Будем называть

нашим

U RL-адрес веб-сайта, который мы загружаем, отображаемый в адресной строке браузера. Другие области будут обозначаться как

внешними

.даже если они являются потомками этого домена.

Если данные были загружены из внешнего домена, их следует называть внешним ресурсом. Если файл был загружен из нашего домена, называйте его внутренним ресурсом. Ресурсом может быть скрипт, изображение или любой другой тип файла.

Если скрипт был загружен из другого домена, он рассматривается как внешний. Скрипт был добавлен в новый тег.

В случае появления на экране элементов, связанных с DOM, таких как LINK, ScripT и других, Adobe Flash Player требует загрузки какого-либо скрипта python.

Назовем теги (submit, click) и другие (FORM, A) создателями ключевых слов.

Если тег присутствовал на странице, когда сервер впервые отобразил ее, будем называть его статическим. Если тег был создан в процессе написания сценария, будем называть его динамическим.

Даже если все поля INPUT изменились, тег FORM остается динамическим.

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

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

7.1 Алгоритм расчета сайтом возможных токенов пользователя по известному ключу

Мы можем быстро определить “действительный” токен T пользователя, если знаем ключ домена, K. Чтобы это сработало, контекст выполнения должен совпадать между создателем запроса и его получателем. Если доменное имя vsphere.local доступно, то

Sender = Recipient = Context = vsphere.local

Жетон из альтернативного источника (сырой) рассчитывается как:

Оригинальный токен будет защищен во время передачи. Соль в заголовках запросов CSI-Salt хэширует младшие 128 бит токена.

*

. Сайт увидит следующий токен:


Где

Hi

Старшие 128 бит,

Lo

– младшие 128 бит исходного токена.

В закрытых веб-консолях управления корпоративной сети нет никаких внешних скриптов или фреймов.

1 Защита ключевой информации от НСД


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

Первое, о чем следует подумать в этой ситуации, – как защитить ключи от кражи.

Ключи могут быть скомпрометированы:

Предположим, что важные данные хранятся на смарт-карте (мы рассмотрели этот выбор в разделе о системных администраторах),

Если важная информация хранится на чипе (это удобно), то чип теперь отвечает за сохранность важной информации. Однако у клавиатурных шпионов есть слабое место, они могут перехватить вводимый PIN-код.

Прямой доступ к конфиденциальным данным можно предотвратить с помощью симметричного шифрования. Какой ключ используется для шифрования?

Во-вторых, мы получаем уязвимость к “автономному” подбору паролей, если ключ генерируется на основе пароля пользователя.

Вставка уникального ключа в браузер (или одну из его специализированных библиотек) – плохая идея. Ключ в скомпилированном файле также изменяется при обновлении браузера.

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

Пользователь может шифровать пароли и пароли, если у него есть ключ браузера. Каждый раз ключ генерируется немедленно. В результате увеличиваются затраты на перебор в автономном режиме.

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

Ключи резервируются (экспортируются в файл). Если, конечно, вы никогда раньше не распространяли ключи на другие устройства таким образом.

2 О паролях в качестве ключей доменов


В одной из первоначальных версий протокола ключ домена мог формироваться на базе пароля пользователя. Алгоритм был хитрым, исключавшим повторение ключей у разных доменов для одного и того же пароля.

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

  1. Если сайт знает свой токен, он может перебрать пароль, который использовался для создания ключа домена, создающего токен. И если пользователь использовал этот пароль в другом месте, мы также получаем ключи домена с других сайтов пользователей. Предположим (гипотетически), что пользователь использует сложный пароль из 8 символов, состоящий из различных букв латинского алфавита, цифр и специальных символов, таких как ~!@#$%^&. Общий алфавит будет выглядеть так: 26 26 26 10 8 = 70 символов. Представим, что у злоумышленника есть специализированный кластер, способный вычислять наши парольные токены со скоростью 1012 вариантов в секунду. Тогда ему потребуется 708 / 1012 = ~576 секунд, чтобы взломать ее. Т.е. вы гарантированно выудите свой пароль за ~10 минут. И в среднем на подбор пароля из известного токена уходит всего 5 минут. Для пароля из 10 символов потребуется в среднем 15 дней. Но, увеличив мощность системы в 10 раз, мы можем сократить это время до 1-2 дней. И эта эффективность теперь доступна и легко достижима благодаря облачным сервисам, распределенным вычислениям и всему наследию freemium-майнинга.
  2. Такой пароль уязвим не только для перебора, но и для кейлоггеров.
  3. Если два незнакомых друг с другом пользователя найдут одинаковый пароль для одного и того же популярного сайта, они получат одинаковый токен. То есть, пароли могут вызвать конфликт токенов (несмотря на длину хэша и всю мощь SHA-2).
  4. Наконец, при разработке протокола я хотел полностью избежать паролей. На самом деле, я просто хранил их более разумно.

3 Риски потери/компрометации ключей и их минимизация

Что если я потеряю мастер-ключ?

Какие опасности возникают при смене ОС или пароля?

Однако вы не сможете посещать свои прежние места. Ваши списки на форуме и история покупок в Интернете будут утеряны. Не проблема.

Однако кто мешает вам повторно зарегистрироваться с новым токеном и подтвердить его по телефону, указанному в том же объявлении? Что означает фраза “восстановление пароля” в связи с повторной регистрацией токена? Где обещанное отсутствие “всех этих” форм?

Однако веб-сайт, который должен идентифицировать посетителя, должен создать регистрационную форму. Вы можете зарегистрироваться еще раз на этой странице. Вы предоставляете ту же информацию (электронная почта, мобильные телефоны).

Тем не менее, лучше избегать неправильной передачи главного ключа.

Как предотвратить потерю? Создавать резервную копию, защищать её паролем и хранить на отчуждаемых носителях. Так же, собственно, как это делается с ключами для bitcoin. В принципе, можно переводить мастер-ключи в печатный вид и сохранять на бумажке. Если на то пошло. А потом восстанавливать ручным вводом. Но это уже для совсем «параноиков», вроде меня.
А что если у меня угонят мастер-ключ?

Это уже серьезно. Однако все еще существует вероятность того, что мастер-ключ может быть скомпрометирован, несмотря на приведенные здесь рекомендации по его хранению (которые не являются частью протокола). К сожалению, никакая защита не является совершенной. Через изъян в механизме javascript ключ может быть взят прямо из памяти браузера. иллюстрация. Или ваш телефон потеряли.

Какие риски угона мастер-ключа?

Информация, которая была отправлена вам от вашего имени. Ваша личная информация может быть доступна другому пользователю, если вы вошли в систему под его именем. незаметно и тихо. В качестве альтернативы вы можете загрузить сразу все личные видеозаписи своих одноклассников. Вам некомфортно? Счастливые любители кошек.

В этом случае немедленно зарегистрируйтесь с новым токеном на значимых веб-сайтах. В худшем случае единственным разумным вариантом действий будет официальная регистрация нового токена в базе данных поставщика услуг. Как зарегистрироваться? Существует множество вариантов, начиная от бумажной фиксации в официальном письме и заканчивая заявлением через службу технической поддержки сайта. только на авторитетных сайтах, таких как онлайн-банки.

Способы минимизации рисков. Использование индивидуальных ключей для доменов (но это понижает мобильность учёток). Двухфакторная аутентификация по независимым каналам. Показ сайтом IP-адресов и устройств, откуда было подключение в последний раз, чтобы вы хотя бы вовремя заметили компрометацию.

1 Трекинг пользователя

Информация о вас может быть беззастенчиво слита на другие сайты сайтом, которому вы доверяете (или который не доверяет вам). В Интернете существуют сайты, которые собирают эти данные и предлагают их заинтересованным пользователям. Редко какой сайт не использует Яндекс-метрику или Google Analytics.

Для того, чтобы два веб-сайта распознали одного и того же клиента как одного и того же человека.

  1. Выполнение одного веб-сайта совместно с другим и взаимный обмен фактически сгенерированными идентификаторами пользователей (в качестве идентификатора может быть использовано все, что угодно из профиля пользователя).
  2. Формирование отпечатка браузера по единому алгоритму (создание уникального набора атрибутов браузера) и косвенная идентификация клиента по этому отпечатку.

Схема 2 обладает незначительным недостатком:

Чтобы пройти аутентификацию, необходимо иметь имя и пароль.

Браузер тоже. Но иногда клиент == браузер.

Токен, по-видимому, лучше всего подходит для использования в схеме № 2, но если пользователь дал согласие на то, чтобы его “запомнили” два сайта, которые работают в тандеме (в одном и том же месте), наш постоянный токен может в итоге служить этим “отпечатком пальца”, а не браузер. Проблема с сайтами в этом месте заключается в том, что они получают различные токены.

Но веб-сайты могут также использовать план № 2. Далее мы узнаем следующее.

Сайт 1 получит код H1, а сайт 2 – H2. На этот раз сайты могут объединиться в пары (H1, H2), чтобы поделиться информацией с любым из своих соперников.

Браузер отправит токены H3 и!=H2 на сайт 3 (см. как создаются токены). В результате нет перекрывающихся частей, что делает невозможным объединение полученных данных.

Отпечаток пальца, оставляемый браузером, не является основным средством слежения. Эта система очень надежна и предотвращает слежку.

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

4 Трекинг с использованием схемы SSO

Два сайта

1

и S

2

Выбирают использование технологии SSO, в которую пользователь верит и имеет для нее ключи. Однако, поскольку ее нельзя реализовать на одном сайте (один из них получит недействительный токен), ее также нельзя открыть на другом. Создать сценарий по той же причине можно только с помощью сторонних сервисов и кода сайта S.

1

В этом случае он устраивает подлую выходку.

Он вводит полупрозрачный тег A, который заполняет все окно на одной из страниц. В адрес вводится идентификатор пользователя (из S1), и ссылка ведет на S2. Ссылка скрыта от пользователя. На любой странице сайта S1 он щелкает мышью.

S2 не получит рабочий маркер. С маркером он не сможет перезагрузиться.

5 Компрометация ключа для SSO

Если учетная запись пользователя на сервере аутентификации, поддерживающем SSO, будет скомпрометирована. Давайте рассмотрим все потенциальные риски, связанные с нашей схемой аутентификации.

Токены каждого сайта генерируются отдельно на основе ключей его домена.

Взлом одного ключа домена не означает, что остальные тоже взломаны.

Большинство веб-сайтов, которые использовали SSO до и после авторизации, будут хранить ваш токен вместе с вашим профилем. Чтобы идентифицировать вас, сайт просто извлекает маркер из базы данных. Поскольку он был установлен во время регистрации, этим сайтам больше не требуется сервер SSO.

Другими словами, вы не потеряете мгновенно все свои доступы. На сайтах злоумышленник будет идентифицирован как кто-то другой.

Злоумышленнику также не удастся открыть новую учетную запись, используя SSO Id пользователя и новый токен сайта. Любые попытки изменить Id при активном SSO должны быть отклонены.

Риск. Если сайт использует только технологии SSO для SOS-авторизации и не хранит ваш токен и профиль в своей базе данных, злоумышленнику достаточно выполнить междоменную проверку.

Уменьшение опасности компрометации Интересно, что при этом профили пользователей и веб-сайты токенов остаются на своей стороне. Попытка злоумышленника провести междоменную аутентификацию может привести к конфликту между старым и новым Id.

Максимальный риск: Авторизация от вашего имени на других (ранее не посещаемых) сайтах. доступ к информации вашего профиля От вашего имени совершаются преступления против вас. Кроме того, злоумышленник может законным образом изменить ваш токен на сервере авторизации, чтобы избежать возврата денег законному владельцу. Однако этот риск сопоставим с теми же проблемами при использовании обычных моделей авторизации.

Методы защиты. Отказ от SSO в этой ситуации не означает отказа от метода аутентификации. Избегайте класть все яйца в одну корзину. ).

Вы можете вернуть контроль над сервером авторизации, если SSO поддерживает двухфакторную аутентификацию с подтверждением личности другими средствами (почта, телефон).

7 Взлом сайта и компрометация токенов

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

Однако предложенный протокол, как ни странно, уменьшает боль в случае перелома участка.

Ключи доменов, на которых был вычислен токен, не скомпрометированы, когда он скомпрометирован. В этой ситуации другие ваши токены находятся в безопасности. И поскольку это так, доступ к другим веб-сайтам по-прежнему заблокирован.

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

Однако использование доменного ключа скомпрометированного токена больше не является вариантом. Мне нужно было поменять ключ.

Можно создать универсальный ключ на основе случайного числа и номера версии сайта, где были скомпрометированы служебные данные.

Client id и secret

Прежде чем вы согласитесь работать с “Ужасным каламбуром дня” и предоставите ему доступ к своим контактам. Сервер авторизации генерирует ClientID и Secret.

App IDApp Secret

) и переслал их в OAuth для дальнейшего переписки.

Как работает OAuth 2.0 и OpenID Connect
«— Привет! Я хотел бы работать с тобой! — Да не вопрос! Вот твои Client ID и Secret!»

Все стороны, кроме Сервера авторизации, не должны иметь доступа к Секрету клиента. Сервер авторизации использует его для проверки достоверности клиента.

Id token — это jwt

ID Token

– это символьная строка со специальным форматированием, называемая JSON Web Token, или jWT.

Некоторые JWT-токены имеют произношение “джотс”.

. JWT может показаться сторонним наблюдателям странной бессмыслицей, но

Client

J WT может получить необходимые данные, включая идентификатор пользователя и время входа в учетную запись.

ID Token

J WT пытается вмешаться в работу системы. Внутренние цифровые данные

ID Token

Какие бывают названия

Заявки на получение кредита [claims]

Сервер авторизации может быть запрошен Клиентом стандартным образом для получения дополнительной [идентификационной] информации, такой как адрес электронной почты.

Oauth для полностью клиентских приложений

Стороннее приложение, например, мобильный календарь или приложение для заметок, может взаимодействовать с API-сервисом только через графический пользовательский интерфейс и без какой-либо бизнес-логики со стороны сервера.

Процедура авторизации показана на схеме ниже. Для взаимодействия с пользователем и подтверждения предоставления прав приложение без серверного компонента должно создать виртуальное окно браузера.

Затем пользователь должен подтвердить делегирование прав доступа к своей учетной записи приложению на странице входа, которая появляется в виртуальном браузере приложения. В случае получения подтверждения пользователь направляется на страницу шлюза access_token.

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

Oauth для приложений с серверной частью: рассмотрим по шагам

Последовательность шагов на схеме ниже.

  1. Пользователь перенаправляется на страницу авторизации, где его просят разрешить приложению работать с данными его аккаунта.
  2. После предоставления необходимых полномочий пользователь направляется на URL обратного вызова – адрес, указанный при регистрации приложения, предназначенный для завершения авторизации. Код авторизации вставляется в GET-параметры URL.
  3. Сервер клиентского приложения делает POST-запрос к серверу авторизации API с кодом авторизации в качестве параметра.
  4. Сервер авторизации проверяет код и возвращает токен доступа приложению.
  5. С помощью маркера доступа приложение авторизуется на сервере API и получает доступ к запрошенным ресурсам пользователя.

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

Дамы и господа, встречайте: oauth 2.0

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

[разрешение]

(или

— согласия

Многие называют его “сверхчеловеком”

Авторизацией[authorization]

или даже

Делегированной авторизацией

. Вы разрешаете приложению выполнять задачи другого приложения от вашего имени без предоставления пароля. Круто!

Как бы это выглядело, если бы вы зарегистрировались для получения текстовых сообщений на сайте под названием “Неудачный каламбур дня” после того, как нашли его в Интернете. Вы решили распространить это слово среди всех знакомых, потому что ваш сайт очень понравился. В конце концов, не всем нравятся ужасные каламбуры.

Как работает OAuth 2.0 и OpenID Connect
«Неудачный каламбур дня: Слышали о парне, который потерял левую половину тела? Теперь он всегда прав!» (перевод примерный, т.к. в оригинале своя игра слов — прим. перев.)

Очевидно, что нет возможности написать всем в списке контактов. Вы пройдете огонь и воду, если вы похожи на меня. Пригласите худший каламбур дня! Если вы предоставите ему доступ к электронной почте ваших контактов, сайт автоматически пригласит их (правила OAuth!

Используемые роли в oauth 2

Описанный протокол различает следующие типы ролей:

  • Владелец (пользователь): позволяет клиентскому приложению получить доступ к данным его учетной записи
  • Сервер ресурса/API: хранит данные учетной записи пользователя и бизнес-логику, отвечающую за выпуск новых токенов OAuth и их аутентификацию при обращении клиентских приложений к ресурсу. Имеет смысл объединить эти роли, так как физически они представляют собой одну услугу;
  • Клиентское приложение: услуга, которой пользователь делегирует права доступа к своим данным на сервере ресурсов. Пользователь должен аутентифицировать приложение, а сервер API должен подтвердить его с помощью ключа доступа (токена).

Как работает oauth 2: от запроса на авторизацию до генерации токена

Посмотрите на диаграмму, которая иллюстрирует основную идею протокола.

Мы подчеркиваем следующие шаги:

  1. Приложение запрашивает у пользователя разрешение на доступ к серверу ресурсов.
  2. После получения разрешения приложение уведомляет сервер аутентификации и предоставляет ему информацию о себе.
  3. Сервер авторизации проверяет подлинность авторизации и информацию, предоставленную в приложении. Если проверка прошла успешно, генерируется маркер доступа.
  4. Затем приложение связывается с сервером ресурсов и отправляет маркер в качестве подтверждения того, что авторизация была одобрена.
  5. Сервер ресурсов проверяет действительность маркера и предоставляет приложению доступ к запрашиваемому ресурсу.

Порядок шагов может меняться в зависимости от бизнес-логики клиентского приложения. Рассмотрим наиболее типичные случаи использования OAuth 2.

Перенос через физическое отчуждаемое устройство

Ключевая информация может храниться на смарт-картах и USB-токенах, поскольку именно это они и представляют. При прямом доступе к устройству два фактора аутентификации предотвращают изменение ключей.

Это правда, что смарт-карты можно использовать только с определенным оборудованием (и драйверами) рабочих станций.

С USB-токенами все обстоит несколько иначе. только драйверы Однако такой токен нельзя вставить в телефон. Но даже в этом случае не совсем верно говорить, что карты памяти SD-card или microSIM, используемые в качестве жетонов для сотовых телефонов, продвигают мобильную связь. Попробуйте извлечь карту из телефона и вставить ее в другой. Не то чтобы это было невозможно. Это связано с тем, насколько это раздражает.

Что делать, если токен сломался? Ваши ключи будут переведены на его счет, если вы увеличите все свои ключи до “Великого Ктулху”.

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


Да и, честно говоря, не защищены такие устройства от клавиатурных шпионов. Вот если бы пин-код вводился бы с самой карты/токена. Тогда другое дело. Но я таких в природе не видел.

Плюсы: можно использовать случайный 256-биные ключи; высокая безопасность за счёт использования двухфакторной аутентификации; высочайший уровень защиты от прямого НСД.
Минусы: зависимость от устройств; требует финансовых затрат; низкая мобильность; необходимость резервирования карт и, как следствие, синхронизации данных между ними; уязвимость к клавиатурным шпионам сохраняется.

Поток oauth

Мы только что проехали через то, что обычно называют майданом.

Поток воды, падающей на землю, называется потоком.

O Auth. В нашем примере поток состоит из нескольких невидимых шагов в дополнение к нескольким видимым шагам, на которых два сервиса договариваются о безопасном обмене информацией. В предыдущей иллюстрации из “Ужасного каламбура дня” используется поток OAuth 2.0 “с кодом авторизации”.

[«authorization code» flow]

Прежде чем мы углубимся в специфику функционирования OAuth, давайте определим несколько терминов.

  • Владелец ресурса :
    Да! Вы являетесь владельцем своих учетных данных, своих данных и контролируете все действия, которые могут быть выполнены с вашими учетными записями.
  • Клиент:
    Приложение (например, служба “Ужасная ошибка дня”), которое хочет получить доступ или выполнить определенные действия от имени владельца ресурса.
  • Сервер авторизации:
    Приложение, которое знает владельца ресурса и в котором владелец ресурса уже имеет учетную запись.
  • Сервер ресурсов:
    Интерфейс прикладного программирования (API) или сервис, который клиент хочет использовать от имени владельца ресурса.
  • URI перенаправления:
    Ссылка, на которую сервер авторизации будет перенаправлять владельца ресурса после предоставления авторизации клиенту. Иногда называется “URL обратного вызова”.
  • Тип ответа:
    Тип информации, которую ожидает получить клиент. Наиболее распространенным типом ответа является код, т.е. клиент ожидает получить код авторизации.
  • Сфера применения:
    Это подробное описание разрешений, необходимых клиенту, например, для доступа к данным или выполнения определенных действий.
  • Согласие:
    Сервер авторизации берет область(и), запрошенную клиентом, и спрашивает владельца ресурса, готов ли он предоставить клиенту соответствующие разрешения.
  • Идентификатор клиента:
    Этот идентификатор используется для идентификации клиента на сервере авторизации.
  • Секрет клиента:
    Это пароль, известный только клиенту и серверу авторизации. Это позволяет им обмениваться информацией конфиденциально.
  • Код авторизации:
    Временный код с коротким сроком действия, который клиент передает серверу авторизации в обмен на маркер доступа.
  • Маркер доступа:
    Ключ, который клиент будет использовать для связи с сервером ресурсов. Своеобразная кредитная карта или ключ, дающий клиенту разрешение запрашивать данные или выполнять действия на сервере ресурсов от его имени.

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

Имеет смысл рассмотреть поток OAuth теперь, когда мы имеем твердое понимание фундаментальных идей OAuth 2.0 и подробно изучили его.

Права доступа

Клиенту предоставляются права доступа в терминах области действия. Scope – это параметр, состоящий из scop-tokens, которые представляют собой строки, разделенные пробелами.

Каждый scope-token обозначает свой набор прав, предоставляемых клиентом. Сотрудники компании могут предоставлять доступ другим сотрудникам компании, только если, например, scope-token doc_read предоставляет доступ к документу на сервере ресурсов (где находится приложение). Это будет выглядеть следующим образом, если сотрудник doc_read: email *donee.

В OAuth 2.0 мы разрабатываем свой собственный scope-token и адаптируем его к нашим требованиям. Ваше творчество и два символа из таблицы ASCII, “, являются единственными ограничениями на имена scope-токенов.

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

Проблемы

Компонентом Monolith является оригинальная версия Auth. Для взаимодействия с сервисами она использует свой собственный протокол. В то время эта “схема” была необходима, но несколько лет использования выявили проблемы.

Auth является монолитной структурой. В результате сервис зависит от цикла выпуска. При расширении масштаба также потребуется развертывание всего монолита службы.

Auth требуется Dodo IS. При каждом действии пользователя в предыдущей реализации внешние сервисы обращались к Auth для проверки данных пользователя. Если Auth “ляжет”, сильная привязка может остановить работу ИБ Dodo в целом.

Auth зависит от Redis. Несмотря на это, Auth, несомненно, потерпит крах, если Redis выйдет из строя. Мы используем Azure Redis, который может похвастаться 99% SLA. Это означает, что перебои в работе могут составлять не более 44 минут в месяц. Такая недоступность неприемлема.

Не полагаясь на стандарты, текущая версия Auth использует свой собственный протокол аутентификации. Если вы имеете в виду бэкенд, то мы используем CS, и у нас нет проблем с поддержкой библиотеки для нашего протокола. Но если будут доступны сервисы на Python, Go или Rust. Создание библиотек для этих языков займет больше времени и вызовет больше трудностей.

Управление доступом на основе ролей – это текущий метод, используемый Auth. Как правило, функция – это компонент услуг, не связанных с конкретной функциональной задачей. рестораны, как иллюстрация. есть помощники менеджеров, которые могут контролировать определенные проекты и составлять расписания или следить за сырьем.

Проблем не было, поэтому нам пришлось начать работу над новой итерацией Auth. Первые три недели проекта мы потратили на изучение стандартов авторизации и аутентификации OpenID Connect 1.5 и OAuth 2.0.

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

Различия протоколов openid и oauth 2

Цели использования – вот где эти протоколы расходятся больше всего. OpenID – это клиентская служба, которая проверяет личность пользователя. В качестве альтернативы можно использовать собственное имя для входа в систему и взаимодействия с любой из служб Google.

O Auth использует ключи авторизации (токены) с заранее определенными правами доступа, в то время как OpenID проверяет учетную запись провайдера.

Регистрация клиента


Способ регистрации клиента, например, ручной или service discovery, вы выбираете сами, в зависимости от

фантазии

Концепции для конкретной реализации. Однако для всех методов регистрации помимо идентификатора клиента требуются два параметра: URI перенаправления и тип.

Адрес, к которому владелец ресурса перейдет после успешной авторизации, является URI перенаправления. Этот адрес, помимо использования для авторизации, также используется для подтверждения того, что сервис, использующий сайт, является тем же самым.

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

Синхронизация через онлайн-сервис

Облачные вычисления становятся все более распространенными. Кибер- и блокчейн-технологии, похоже, занимают место “банановых” технологий. Естественно, возникает желание обмениваться важной информацией через онлайн-платформу. “Онлайн” смарт-карту того или иного типа.

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


Вот только, никто не гарантирует, что онлайн-сервис не будет взломан или не станет сам сливать ваши, пусть и зашифрованные, ключи «куда надо». Кто будет за бесплатно реализовывать такой сервис. То-то и оно.

Естественно, пароль все равно не защищает ключи от прямого использования. Какие обстоятельства позволяют использовать перебор “в автономном режиме”? В связи с этим возникает еще один вопрос.

Плюсы:высокая мобильность учетных данных; независимость от устройства и браузера; нужен всего один единственный пароль (хотя от пароля не ушли, но уже лучше).
Недостатки:менее безопасно, чем хранение ключей на отчуждаемом носителе. Фактически безопасность ключей основана на стойкости пароля к подбору.

В качестве альтернативы вы можете зашифровать другие ключи, используя главный ключ. тот же самый ключ, который используется при вычислении других ключей домена. Альтернативный вариант.

Токены

В OAuth 2.0 токен – это строка, непрозрачная для клиента. Формат строки обычно кажется случайным; клиенту он безразличен. Токен – это ключ, который позволяет получить доступ к чему-либо, например, к новому токену или защищенному ресурсу (токен доступа).

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

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

Во время авторизации клиенту предоставляется определенный набор прав доступа, которые назначаются маркеру доступа. Как выглядят права доступа OAuth 2.0?

Заключение

Когда я показал статью примерно такого же содержания многим своим друзьям, они спросили: “В чем суть?”.

Если смотреть с высока

На самом деле, при беглом взгляде на протокол создается впечатление, что он относится к числу “особых”. встроенный в браузер пароль.

Он отличается от менеджеров паролей, проще говоря. Возможно, нет ни одного менеджера, который мог бы синхронизировать пароли во всех браузерах и устройствах. Кроме того, он имеет открытый исходный код и, что самое главное, бесплатен. Более того, сомнительно, что у создателя такого менеджера хватит наглости “тихо слить” ваши аккаунты под благовидным предлогом “онлайн синхронизации”.

Серверы для междоменной авторизации не очень практичны. только “онлайн” сбоку; то же меню. Здесь вы доверяете владельцу сервера, а не разработчику менеджера. Однако сервер может быть взломан (независимо от того, Google это или Facebook), и в конечном итоге произойдет утечка информации. При наличии неправильных заданий, например ESIA, сервер может быть заблокирован или заблокирован третьей стороной. Такие серверы, маскируясь под SSO, собирают чрезмерное количество данных о вас и часто становятся мишенью международных хакеров. Хотите ли вы получать это?

Кроме того, я не против зарегистрироваться в хомячьих социальных сетях только для того, чтобы разместить объявление о предстоящем онлайн-блошином рынке и покрасить его там! Кроме того, зарегистрироваться в этих социальных сетях становится все сложнее! Раньше достаточно было сначала подтвердить электронную почту, потом телефон. Они предоставляют полиции фотографии реальных людей. Я не буду шокирован, если скоро от нас будут требовать анализы крови и отпечатков пальцев. Вы действительно этого хотите?

Я желаю интернет-зависимости. А вы? Людей не делает свободными SSO.

. Большинство браузеров также имеют функцию “запомнить пароль”. Правда, в ОС эта функция не предусмотрена. Если есть различия между браузерами, то могут быть различия и в пределах одного устройства. На самом деле, пользователь осознает сложность хранения и поддержания синхронизированных паролей. Чувак, покрути это.

Некоторые браузеры советуют хранить пароли в “облаке”, входя в него. Но мы уже знакомы с запахом этого “безопасного облака”. Системные блокировки различными способами заставляют вас полагаться на конкретный браузер.

Как получилось, что предложенный протокол не содержит ни одной уникальной уловки?

Главный вопрос в том, что главного вопроса нет!

Вместо вывода

Чтобы сделать его максимально понятным и простым, я опустил много информации. Какие типы запросов передают символы и параметры?

Я рекомендую прочитать RFC 6749 (для OAuth 2.0) и RFC 8628, если вы хотите углубиться. На сайте OAuth вы также можете следить за обновлениями RFC.

Если вы нашли статью полезной, но не хотите больше информации, дайте мне знать в комментариях, и я расскажу больше о PKCE.

Полезные ссылки:

Похожее:  Передать показания счетчика электроэнергии Тамбов (ТОСК)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *