Моя домашняя страница:2 в n-й степени_
В современной разработке веб-приложений безопасность имеет решающее значение. Будь то защита конфиденциальных данных пользователей или обеспечение того, чтобы API разрешали доступ только к авторизованным запросам, разработчикам нужна надежная и гибкая система безопасности для удовлетворения этих потребностей. Spring Security, как модуль безопасности среды Spring, может обеспечить комплексную защиту приложений. В качестве протокола авторизации OAuth2 широко используется при едином входе (SSO), входе в социальные сети, защите API и других сценариях. В этой статье будет подробно описано, как интегрировать Spring Security в Spring Boot и реализовать авторизацию OAuth2.
Spring Security — это настраиваемая платформа безопасности, которая в основном обеспечивает функции аутентификации и авторизации личности. С помощью Spring Security разработчики могут определить, какие URL-адреса требуют аутентификации, какие пользователи имеют разрешение на доступ к определенным ресурсам и т. д.
Сначала нам нужно добавить в проект Spring Security зависимость. существовать Spring Boot проект, это можно сделать с помощью pom.xml
Для этого добавьте в файл следующие зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
После добавления зависимостей Spring Boot автоматически добавит базовый механизм защиты ко всем URL-адресам. По умолчанию все HTTP-запросы требуют аутентификации. Если пользователь не вошел в систему, приложение автоматически перейдет на страницу входа по умолчанию.
Далее мы можем настроить правила безопасности, настроив классы. Например, мы можем создать SecurityConfig
Класс, настроить который URL Разрешить анонимный доступ, требующий аутентификации:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll() // Разрешить анонимный доступ
.anyRequest().authenticated() // Другие запросы требуют аутентификации.
.and()
.formLogin() // давать возможностьформа Авторизоваться
.loginPage("/login") // Настроить страницу «Авторизоваться»
.permitAll()
.and()
.logout() // Включить функцию выхода из системы
.permitAll();
}
}
существоватьэтот Конфигурациясередина,/public/**
Ко всем ресурсам по этому пути могут получить доступ анонимные пользователи, а любые другие запросы требуют, чтобы пользователь вошел в систему перед доступом. Мы также настроили страницу входа так, чтобы пользователи перенаправлялись на эту страницу при доступе к защищенным ресурсам.
OAuth2 — это протокол авторизации, который позволяет сторонним приложениям получать доступ к ресурсам пользователя без прямого получения учетных данных пользователя. Используя OAuth2, приложения могут безопасно получать доступ к защищенным ресурсам с помощью токенов доступа.
Чтобы интегрировать OAuth2 в Spring Boot, сначала необходимо добавить соответствующие зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Далее нам нужно application.yml
Настроить в файле OAuth2 Информация о клиенте. к Google OAuth2 Например, мы можем настроить это так:
spring: security: oauth2: client: registration: google: client-id: YOUR_GOOGLE_CLIENT_ID client-secret: YOUR_GOOGLE_CLIENT_SECRET scope: profile, email redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}" client-name: Google provider: google: authorization-uri: https://accounts.google.com/o/oauth2/auth token-uri: https://oauth2.googleapis.com/token user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
В этой конфигурации мы предоставляем Google OAuth2 клиент client-id
и client-secret
,и связанные с этим OAuth2 конечная точка URL-адрес. Когда пользователь пытается войти в систему, приложение перенаправляется на Google Страница авторизации, после авторизации пользователя Google Будет возвращен код авторизации, и приложение будет использовать код авторизации для обмена на токен доступа и получения информации о пользователе.
Чтобы защитить наш API и обеспечить доступ к нему только через авторизацию OAuth2, нам необходимо настроить приложение в качестве сервера ресурсов. Сервер ресурсов отвечает за защиту ресурсов, таких как API, и проверку токенов доступа.
Мы можем реализовать функцию сервера ресурсов с помощью следующей конфигурации:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/public/**").permitAll() // Разрешить анонимный доступизAPI
.antMatchers("/api/private/**").authenticated() // API, требующие аутентификации OAuth2
.and()
.oauth2Login(); // давать возможность OAuth2 Авторизоваться
}
}
существоватьэтот Конфигурациясередина,/api/public/**
Доступ к ресурсам по пути можно получить анонимно, в то время как /api/private/**
Ресурсы ниже требуют от пользователей прохождения OAuth2 Войдите в систему и принесите действительный токен доступа, чтобы получить доступ.
В интерфейсном приложении (например, использующем React или Angular), когда пользователь успешно входит в систему через OAuth2, приложение получит токен доступа. Этот токен необходимо добавлять к заголовку запроса каждый раз, когда запрашивается защищенный ресурс.
Предположим, используя axios
как HTTP Клиентский интерфейсный код может выглядеть так:
import axios from 'axios';
const token = localStorage.getItem('access_token');
axios.get('https://your-api.com/api/private/data', {
headers: {
'Authorization': `Bearer ${token}`
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error('Error fetching data:', error);
});
В этом примере мы начинаем с браузера localStorage
Получил токен доступа и добавил его в заголовок запроса. Authorization
поле, с Bearer
Формат токена, отправляемого на внутренний сервер. Сервер ресурсов проверит достоверность этого токена, и если проверка пройдет успешно, доступ к защищенному ресурсу будет разрешен.
В этом блоге мы объясняем, как Spring Boot Центральная интеграция Spring Security и OAuth2 Для защиты безопасности. Сначала мы настроили базовый Spring Security Настройки, позволяющие анонимный доступ к общедоступным ресурсам и защиту других ресурсов. Далее мы настроили OAuth2 клиент, позволяя приложению проходить Google руководить OAuth2 Авторизация. Наконец, мы покажем, как защитить API, чтобы его можно было только передать OAuth2 Предоставьте доступ и используйте токен доступа во внешнем приложении для запроса защищенного ресурса.
Этот механизм безопасности не только повышает безопасность приложения.,Это также может предоставить пользователям лучший опыт,Например, быстро авторизоваться через социальные аккаунты. По мере роста требований к приложениям,Эти конфигурации могут быть дополнительно расширены и настроены.,Поддержка более сложных бизнес-сценариев.