В этом руководстве показано, как интегрировать 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 г.