В этом руководстве показано, как интегрировать OAuth2 с Spring Security в приложение Spring Boot с OpenAPI 3.

Приложение Spring Boot, которое я собираюсь использовать, основано на моей предыдущей статье: Документирование SpringBoot REST API с помощью OpenAPI 3.

OAuth

OAuth — это структура авторизации, которую многие компании используют для защиты доступа к своим защищенным ресурсам. Он выполняет это с помощью токенов доступа.

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

Роли

OAuth определяет четыре роли

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

Предоставление авторизации

Предоставление авторизации — это учетные данные, представляющие авторизацию владельца ресурса, используемую клиентом для получения токена доступа.

OAuth определяет четыре типа предоставления.

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

Тип гранта Client Credentials наиболее подходит для межсерверных приложений, таких как типичные взаимодействия B2B.

Начиная

Мы добавляем зависимость Spring OAuth в наш файл pom.xml.

Включить поддержку сервера авторизации

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

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

Создание ClientId и Client Secret

Откройте/создайте файл resources/application.yml и добавьте следующие свойства:

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

Включить поддержку сервера ресурсов

Создайте класс, расширяющий ResourceServerConfigurerAdapter, и добавьте следующий код.

Теперь запустите основное приложение.

http://localhost:8080/swagger-ui.html

И попробуйте вставить книгу (кнопка Try out). В параметре bookAuthorization напишите что угодно (например, ключ).

Затем вы получаете сообщение об ошибке.

Почему это происходит? Что ж, нам нужно сообщить OpenAPI, что настраивает безопасность.

Настройте OpenAPI и Oauth2

Откройте класс OpenApiConfig и добавьте новый код.

Из предыдущего кода видно, что перед настройкой требования безопасности в OpenAPI нам необходимо определить новый компонент схемы безопасности, например, с именем «spring_oauth».

Теперь снова запустите основное приложение и увидите новую зеленую кнопку «Авторизовать». Затем введите учетные данные и область действия.

Закройте всплывающее окно и попробуйте снова вставить книгу.

Да, ты сделал это!

Теперь ваши конечные точки защищены.



«Принципы проектирования программного обеспечения: практическое руководство (английское издание)
Принципы проектирования программного обеспечения — это рекомендации, которые помогают разработчикам сделать объектно-ориентированную систему устойчивой к…amzn .к"



Мне нравится делиться своими знаниями и опытом в программировании на Java, интервью по кодированию, алгоритмах, структурах данных, чистом коде, принципах SOLID, распределенных системах, Spring Framework, веб-сервисах и других технических темах.



Первоначально опубликовано на https://codersite.dev 26 апреля 2022 г.