OAuth 2.0 – базовые понятия понятным языком

Что же это такое?

Википедия опубликовала руководство по правильному использованию словарей при написании слов:

Любая информационная система, принимающая решение о разрешении пользователям выполнять ту или иную операцию, делает это после проведения своего рода оценки пользователя. К этому моменту субъект должен быть зрелым.

идентифицирован

Мы должны знать, кто он)

.

Он полностью совпадает с ним.

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

Что документируется в разделе аутентификации

Специфика работы аутентификации не описана в документации API. Недоступные внутренние процедуры аутентификации затруднят хакерам использование API.

Тем не менее нужно объяснить необходимую информацию

  • Как получить ключ API;
  • Как аутентифицировать запрос;
  • Сообщения об ошибках, связанных с неправильной аутентификацией;
  • Чувствительность учетных данных;
  • Срок действия маркера доступа (авторизации).

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

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

Абстрактное описание протокола

Давайте рассмотрим схему взаимодействия ролей теперь, когда мы знакомы с ролями OAuth и тем, как они связаны друг с другом.

Давайте создадим диаграмму, изображающую порядок действий по этой схеме:

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

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

Hmac (код авторизации сообщений на основе хэша)

Более строгой формой аутентификации, чем финансовые API, является H MAC, что расшифровывается как Message-based Messag Authorization Code. Секретный ключ хранится в тайне и известен только отправителю и получателям.

Затем он проходит безопасный алгоритм хэширования (SHA) и кодируется с помощью закрытого ключа. Хеш – это зашифрованная алгоритмом строка. Результат хранится в заголовке вопроса в виде подписи запроса, которая, по сути, является символическим именем.

После получения запроса сервер API (получатель) получает те же системные свойства и использует секретный ключ для получения одной строки. Ответ принимается, если строка соответствует подписи в заголовке запроса. Запрос отклоняется, если строки не совпадают.

Иллюстрация процедуры аутентификации HMAC представлена ниже:

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

Amazon web services

amazon
авторизация Amazon

Использование HMAC – это Amazon. Включение полной диаграммы усложнило бы процесс.

Api ключ

Большинство API требуют авторизации с помощью ключа API для использования. Заголовок запроса обычно содержит длинную строку, которая и является ключом API. Основная цель API-ключа – идентифицировать пользователя, запрашивающего доступ к API. Можно связать ключ API с конкретным приложением, которое регистрируется.

apikey
Ключи APK используют строку в свойстве заголовка для авторизации запросов

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

Basic auth

Basic Auth – это еще один тип аутентификации. При использовании этой техники в заголовок запроса могут быть добавлены пары имя пользователя:пароль. Для кодирования используется Base64, техника кодирования (шифрования) символов в 64 символа для обеспечения безопасной передачи. Иллюстрация Basic Auth в заголовке запроса:

Dropbox

Dropbox
Авторизация в Dropbox

Авторизация для приложений, имеющих серверную часть

Схема авторизации приложений, имеющих серверную часть

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

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

Авторизация полностью клиентских приложений

Схема авторизации полностью клиентских платежей

  1. Открывает встроенный браузер со страницей авторизации
  2. Пользователю предлагается подтвердить авторизацию
  3. Если пользователь соглашается, браузер перенаправляется на страницу-заглушку с маркером доступа в фрагменте URL (после #)
  4. Приложение перехватывает перенаправление и получает маркер доступа из адреса страницы.

Этот вариант требует открытия окна браузера в приложении, но он не требует использования серверного компонента или другого вызова сервер-сервер.

authorization codeaccess token

Владелец ресурса: пользователь

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

Восстановление предыдущей авторизации


Обычно,

Карта доступа

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

Карта доступа

‘а, в дополнение к

Карта доступа

Он может возвращаться еще

Перезагрузить токен

. Его можно использовать для запроса направления.

Карта доступа

Всё хорошо?

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

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

Делегирование полномочий

Давайте попробуем разработать отдельный модуль. Создадим для него отдельный скрипт и дадим ему имя security.php. С самого начала мы привяжем его к закрытым страницам нашего проекта. Этот файл будет анализировать некоторые обстоятельства, и в зависимости от результатов будет установлен специальный флаг 0 или 1. Пусть PHP хранит этот флаг в массиве $SESSION для сессионных переменных.

Что это значит для нас? В скрипт можно загрузить все что угодно, вплоть до анализа недавней активности пользователя и временной блокировки его аккаунта. Мы начинаем с простого, но крайне важного процесса: сравниваем хэш-значение из cookie с тем, каким оно должно быть, с испорченным. IP-адрес пользователя, user agent и пароль известны серверу.

Зачем нужен authorization code

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

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

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

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

Как быть?

Скорее всего, необходимо что-то сделать. Да, вы можете немедленно активировать SSL. Однако вы можете значительно сократить потребность в нем, даже если решите этого не делать. До того, как полгода назад SSL стал обязательным, нам приходилось с этим мириться.

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

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

Клиент: приложение

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

Минусы oauth 2.0


Во всей этой красоте есть и ложка дегтя, куда без нее?

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

Безопасность O Auth 2.0 SSL в значительной степени основана на SN. Жизнь разработчиков значительно упрощается, но требуется больше вычислительной мощности и управления.

Образцы разделов авторизации

В таблице представлены примеры разделов авторизации в документации API.

Определяем термины

Перечислим несколько ключевых слов.

  • Аутентификация: подтверждение идентичности
  • Авторизация: согласие на определенное действие

Несмотря на то, что API поддерживает аутентификацию, некоторые запросы запрещены.

auth
аутентификация и авторизация

Отличие от openid

Часто можно услышать такой вопрос. Что отличает OpenID от OAuth и зачем он нам нужен, если OpenID уже существует?

  • OAuth – это протокол аутентификации, т.е. он позволяет назначать права на использование ресурса (например, API сервиса). В этом случае, как правило, невозможно определить, кто в настоящее время использует эти права.
  • OpenID – это средство аутентификации: с помощью этой системы можно убедиться, что пользователь является тем, за кого себя выдает. Аутентифицирующая сторона определяет, какими правами обладает аутентифицированный пользователь.

Последствия нехватки безопасности api

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

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

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

A PI предоставляет информацию и авторизацию, которые помогают решить следующие задачи:

Предыстория


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

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

Преимущества и недостатки oauth 2.0

Ниже перечислены преимущества протокола OAuth 2.0:

Из плюсов:

Пример использования токена доступа

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

Вот иллюстрация запроса API на основе curl. Обратите внимание, что он содержит маркер доступа:

Проблематика

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

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

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

  1. Пользователь, не связанный с конкретным контрактом, не должен видеть его в системе
  2. Автор контракта должен видеть его на всех этапах.
  3. Пользователь, набравший не менее 10 баллов, может создать контракт.
  4. Ответственное лицо должно видеть договор с момента его поступления к нему и далее.
  5. Руководители подразделений должны видеть контракты своих подразделений на более высоких уровнях иерархии.
  6. Автор контракта и руководитель подразделения имеют право отозвать контракт на любом этапе процесса утверждения.
  7. Руководство головного офиса и секретариат должны видеть документы всех филиалов.
  8. Пользователь, создавший договор, не должен иметь права его утверждать.

Безопасность может предъявлять к нам следующие требования.

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

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

Почему же требования эти проблемные:

Процесс с учётными данными владельца ресурса

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

Процесс с учётными данными клиента

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

Пути решения

Мы создали ряд моделей контроля доступа, включая:

Модель управления доступом, основанная на полномочиях, – M AC. Субъект должен доверять объекту, чтобы он имел уровень доступа не ниже уровня секретности объекта.

Прямой контроль доступа, или D AC. Субъект в списке доступа (AP) объекта доступен для объекта ACL.

Модель управления доступом на основе ролей известна как R BAC. Обладая ролью с полномочиями, соответствующими запрашиваемому доступу, субъект может получить доступ к объекту.

Модель управления доступом на основе атрибутов известна как WAC. На основе анализа политик, учитывающих значения атрибутов субъекта, объекта и среды, объект и предмет могут быть установлены динамически. Кроме того, сюда входят PBAC, RAdac и CBA. С некоторыми различиями (потрясающее резюме KUSTIS).

Они должны быть в идеальном состоянии и без велосипедов. В сложных информационных системах часто используется несколько моделей в комбинации. Роль добавляется в список доступа с помощью ACL RBAC. Однако правильная реализация готовых моделей – непростая задача.

На первый взгляд, в качестве альтернативы я бы выбрал PBAC ACL. Если бы требования выполнялись следующим образом:

Все требования ИБ могут быть успешно реализованы с помощью ACL. Несмотря на величие динамических правил ИБ 1 и 2, мы должны добавить к ним журнал или другой подобный механизм:

Разные виды авторизации

Существуют различные методы авторизации. Вот некоторые из наиболее распространенных методов авторизации.

Разрешение на авторизацию

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

  • Код авторизации: используется в приложениях на стороне сервера.
  • Неявный: используется мобильными или веб-приложениями (приложениями, работающими на устройстве пользователя).
  • Учетные данные пароля владельца ресурса: используются доверенными приложениями, например, приложениями, которые являются частью самой службы.
  • Учетные данные клиента: используются, когда приложение получает доступ к API.

Затем мы рассмотрим способы получения разрешений авторизации и случаи их использования.

Реализация сервера авторизации oauth с помощью сервера авторизации spring

OAuth 2.0 – базовые понятия понятным языком

Сервер авторизации OAuth предназначен для предоставления клиенту маркера доступа, чтобы клиент мог использовать его для запроса ресурсов. Каждый раз, когда клиентское приложение запрашивает ресурс, сервер ресурсов проверяет этот маркер доступа с сервером авторизации. Для реализации сервера авторизации вы можете использовать различные инструменты с открытым исходным кодом, включая Keycloak (наследие) и Spring Authorization Server. В этом руководстве я продемонстрирую, как настроить сервер авторизации OAUT с помощью Spring Authorization Server.

Я начну с создания свежего проекта Spring Boot, используя Web Starter и Security Starter:

OAuth 2.0 – базовые понятия понятным языком

Хранилище:

<dependency>
    <groupId>org.springframework.security.experimental</groupId>
    <artifactId>spring-security-oauth2-authorization-server</artifactId>
    <version>0.1.2</version>
</dependency>

Для примера.

Результат:

OAuth 2.0 – базовые понятия понятным языком

Конфигурация сервера авторизации

Сначала я создам новый класс AuthorizationServerConfiguration для настройки сервера авторизации.

Класс OAuth2AutorizationServerConfiguration по умолчанию поддерживается сервером авторизации Spring. Метод applyDefaultSecurity(), который можно увидеть в исходном коде этого класса, инициализирует объект OAuth2AUTorizationserverConfigureER:.

public static void applyDefaultSecurity(HttpSecurity http) throws Exception {
    OAuth2AuthorizationServerConfigurer<HttpSecurity> authorizationServerConfigurer =
            new OAuth2AuthorizationServerConfigurer<>();
    RequestMatcher endpointsMatcher = authorizationServerConfigurer
            .getEndpointsMatcher();

    http
        .requestMatcher(endpointsMatcher)
        .authorizeRequests(authorizeRequests ->
            authorizeRequests.anyRequest().authenticated()
        )
        .csrf(csrf -> csrf.ignoringRequestMatchers(endpointsMatcher))
        .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt)
        .apply(authorizationServerConfigurer);
}

Безопасность конечных точек сервера авторизации по умолчанию также задается методом applyDefaultSecurity().

Класс OAuth2AuthorizationServerConfiguration также определяет бин (bean) для класса SecurityFilterChain, который вызывает метод applyDefaultSecurity() для регистрации этих конфигураций по умолчанию в Spring Security сервера авторизации.

Вы можете использовать Spring Import для инкапсуляции этого класса, OAuth2 AUT 2AutorizationServerConfiguration, чтобы вы могли использовать эти шифры так, как считаете нужным.

package com.huongdanjava.springauthorizationserver;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.security.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;

@Configuration
@Import(OAuth2AuthorizationServerConfiguration.class)
public class AuthorizationServerConfiguration {

}

В качестве альтернативы давайте объявим корзину для класса SecurityFilterChain и воспользуемся методом applyDefaultSecurity() для добавления пользовательского кода.

package com.huongdanjava.springauthorizationserver;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.OAuth2AuthorizationServerConfiguration;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class AuthorizationServerConfiguration {

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);

        return http.formLogin(Customizer.withDefaults()).build();
    }

}

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

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

@Bean
public JwtDecoder jwtDecoder(JWKSource<SecurityContext> jwkSource) {
    return OAuth2AuthorizationServerConfiguration.jwtDecoder(jwkSource);
}

@Bean
public JWKSource<SecurityContext> jwkSource() throws NoSuchAlgorithmException {
    RSAKey rsaKey = generateRsa();
    JWKSet jwkSet = new JWKSet(rsaKey);

    return (jwkSelector, securityContext) -> jwkSelector.select(jwkSet);
}

private static RSAKey generateRsa() throws NoSuchAlgorithmException {
    KeyPair keyPair = generateRsaKey();
    RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
    RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();

    return new RSAKey.Builder(publicKey)
        .privateKey(privateKey)
        .keyID(UUID.randomUUID().toString())
        .build();
}

private static KeyPair generateRsaKey() throws NoSuchAlgorithmException {
    KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
    keyPairGenerator.initialize(2048);

    return keyPairGenerator.generateKeyPair();
}

Установка предохранителя пружины

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

Мы можем определить цепочку SecurityFilterChain следующим образом:

package com.huongdanjava.springauthorizationserver;

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@EnableWebSecurity
public class SpringSecurityConfiguration {

    @Bean
    SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests(authorizeRequests ->
                authorizeRequests.anyRequest().authenticated()
            )
            .formLogin(Customizer.withDefaults());

        return http.build();
    }

}

Если пользователь не вошел в систему в этот момент, отображается страница входа в систему.

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

Класс RegisteredClient используется авторизационным сервером Spring для объявления информации о клиентах, зарегистрированных на сервере авторизации.

Мы можем объявить следующие данные о клиенте в памяти или соответствующей базе данных:

OAuth 2.0 – базовые понятия понятным языком

Чтобы упростить задачу, я буду использовать память следующим образом:

@Bean
public RegisteredClientRepository registeredClientRepository() {
    RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
        .clientId("huongdanjava")
        .clientSecret("{noop}123456")
        .clientAuthenticationMethod(ClientAuthenticationMethod.POST)
        .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
        .redirectUri("https://oidcdebugger.com/debug")
        .scope(OidcScopes.OPENID)
        .build();

    return new InMemoryRegisteredClientRepository(registeredClient);
}

I D клиента и вид гранта авторизации, для которого был активирован этот ID.

Нет необходимости описывать, что такое идентификатор клиента! Следует отметить, что все типы грантов OAuth 2 поддерживаются сервером Win32 в качестве подтверждения типа гранта авторизации.

Если клиент приватный, см. также раздел OAuth 2.0 Client Types Client Secret is required Здесь вы должны указать способ шифрования клиентского секрета с помощью PasswordEncoder. Вы можете использовать NoOpPassword Engineer и объявить “Nnoop” в качестве первого номера клиента (как я сделал выше), если вы не хотите скрывать его для тестирования или других целей. Помните, что это делается только для тестирования!

Если клиент безопасен, нам нужно указать маркер доступа.

В зависимости от типа гранта клиента, который вы определяете, есть и другая необходимая информация, которую нам нужно объявить. Например, в моем случае я определяю клиента с типом разрешения authorization_code, поэтому мне нужно определить redirect_uri. Здесь я буду использовать инструмент https://oidcdebugger.com/ для получения кода авторизации, поэтому я определяю redirect_uri со значением https://oidcdebugger.com/debug, как это можно видеть в примере.

Давайте определим информацию о клиенте в соответствии с потребностями.

Регистрация пользователя на сервере авторизации

Чтобы зарегистрировать пользователя, сервер авторизации загружает в память следующую декларацию:

@Bean
public UserDetailsService users() {
    UserDetails user = User.withDefaultPasswordEncoder()
        .username("admin")
        .password("password")
        .roles("ADMIN")
        .build();

    return new InMemoryUserDetailsManager(user);
}

Фундаментальная настройка сервера авторизации закончена.

Чтобы проверить результаты, я воспользуюсь инструментом https://oidcdebugger.com/, как упоминалось выше, со следующим объявлением:

OAuth 2.0 – базовые понятия понятным языком

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

OAuth 2.0 – базовые понятия понятным языком

Вы можете войти в систему, используя данные, которые мы предоставили выше, и результаты будут следующими:

OAuth 2.0 – базовые понятия понятным языком

Применяя секрет клиента, который мы раскрыли в этом посте вместе с этим кодом авторизации:

OAuth 2.0 – базовые понятия понятным языком

Материалы для занятий по теме “Система разработки приложений” собраны в рамках курса “Разработчик на Spring Framework”. Приглашаем вас на день открытых дверей, если вы хотите узнать больше о курсе и программе, а также познакомиться с преподавателем. Зарегистрироваться можно здесь.

Регистрация приложения

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

  • Название приложения
  • Веб-сайт приложения
  • URL перенаправления или URL обратного вызова.

После одобрения (или отклонения) вашей заявки служба перенаправит пользователей на адрес, указанный в URL перенаправления.

Роли oauth

O Auth определяет четыре роли

  • Владелец ресурса
  • Клиент
  • Сервер ресурсов
  • Сервер полномочий

Мы рассмотрим каждую из ролей в следующих разделах.

Сервер ресурсов / авторизации: api

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

Служба API выполняет двойную функцию – сервера ресурсов и службы авторизации – с точки зрения разработчика приложений. Далее мы будем просто использовать термины “сервис” или “API” для описания этих двух ролей.

Стандартная реализация

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

Флажок “запомнить меня” может быть добавлен более опытными программистами, или он может быть отключен по умолчанию. Как они себя ведут? Они просто сохраняют идентификатор пользователя в своем собственном файле cookie. Однако они часто сохраняют вместе с ним пароли, потому что хранить только ID слишком громоздко (любой может поставить любой номер и получить доступ к любой учетной записи). Проще говоря.

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

Человек может скопировать все файлы cookie на свой компьютер, если у вас его нет. Ваш файл cookie может стать доступным для стороннего веб-сайта из-за недостатков безопасности в вашем браузере (да-нет- маловероятно).

Мы используем SSL только для аутентификации (мы отключили его на всех остальных страницах для ускорения работы), и мы никогда не передаем пароли в зашифрованном виде.

Тип разрешения на авторизацию: учётные данные владельца ресурса

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

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

Тип разрешения на авторизацию: учётные данные клиента

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

Чем отличаются openid и oauth

Было дано много объяснений, но до сих пор остается некоторое недопонимание.

Шаг 1: ссылка для неявной авторизации

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

Шаг 1: ссылка с кодом авторизации

Сначала пользователь получает ссылку следующего вида:

Шаг 3: пользовательский агент получает токен доступа с uri перенаправления

Если пользователь выбирает “Авторизовать приложение”, служба отправляет фрагмент по URI, содержащий маркер доступа. Это выглядит примерно так:

Шаг 4: пользовательский агент следует по uri перенаправления

Агент пользователя сохраняет маркер доступа и продолжает перенаправлять URI.

Шаг 4: приложение запрашивает токен доступа

Приложение отправляет код авторизации и данные аутентификации (включая секрет клиента) в API, чтобы запросить у него маркер доступа. Примеры запросов на получение маркера DigitalOcean показаны в этом примере:

Шаг 5: приложение выполняет скрипт извлечения токена доступа

Приложение возвращает веб-страницу со сценарием для извлечения маркера доступа из URI полного перенаправления.

Шаг 5: приложение получает токен доступа

A PI возвращает токен доступа (и, если необходимо, токен для обновления okey) после успешной авторизации. Так может быть составлен весь ответ сервера:

Шаг 6: токен доступа передаётся приложению

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

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

👨‍💻 практическое занятие: авторизация

В нашем проекте discovered ops мы обнаружим информацию, касающуюся авторизации для запросов API. К запросам:

  • Какой тип авторизации необходим для отправки запросов к API?
  • Существуют ли различные уровни доступа в рамках авторизации (например, платный и бесплатный), которые определяют количество запросов, которые могут быть сделаны, или типы информации, которые могут быть получены?
  • Возможно ли получить ключ API или другой способ авторизации, необходимый для выполнения тестовых вызовов API?
  • Как информация об авторизации включена в раздел “Начало работы”?

Go next ➡

Итоги

O Auth 2.0 – это адаптируемая технология для предоставления приложениям прав доступа. OAuth 2.0 может использоваться для чтения статистики из социальной сети или в качестве упрощенного входа на сторонние веб-сайты, в зависимости от приложения, доступ к ресурсам которого требует сквозной авторизации.

O Auth 2.0 в целом имеет ряд проблем, которые были у OAuth 1.1, а также исправляет эти проблемы. В настоящее время он находится в стадии создания. Следующая итерация стандарта OAuth 2.1. ожидается к выпуску в 2019 году.

Итого

Тема авторизации несправедливо недостаточно изучена в публикациях и в ходе реальных разработок. Атака на сайт через SMS при использовании двухфакторной аутентификации. Система авторизации в корпоративной системе должна быть реализована правильно, без использования каких-либо костылей.

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

Sendgrid

SendGrid
API ключ SendGrid

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

Заключение

O Auth – это простой стандарт авторизации, который поддерживает любую платформу и основан на фундаментальных идеях Интернета. Крупнейшие сайты поддерживают этот стандарт, и очевидно, что его популярность будет продолжать расти. Если вы рассматриваете возможность использования OAuth 2.0, авторизация OpenOAC – это разумный выбор.

Похожее:  Аутентификация - Wurth-B2B-EShop

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

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