Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как включить защиту REST API с помощью Microsoft Entra ID в приложении Spring Boot.
В этой статье в качестве примера используется система опроса. Система опроса предоставляет следующие ИНТЕРФЕЙСЫ REST API:
-
GET /api/survey/question— это просмотр опроса. -
POST /api/surveyпредназначен для заполнения опроса. -
GET /api/surveyдля просмотра результата опроса.
В этой статье вы защищаете эти API, применяя управление доступом на основе ролей (RBAC) для соблюдения следующих требований:
-
GET /api/survey/questionдоступен по каждому запросу. -
POST /api/surveyдоступен для авторизованных запросов пользователей, содержащих токен доступа с предоставленной областьюSCOPE_Survey.User. -
GET /api/surveyдоступен для запросов аутентифицированных пользователей-администраторов, содержащих токен доступа с предоставленной областьюSCOPE_Survey.Admin.
Предпосылки
- Подписка Azure — создать бесплатно.
- Java Development Kit (JDK) версии 8 или более поздней.
- Apache Maven
- Azure CLI
- Экземпляр Microsoft Entra. Инструкции по созданию объекта см. в разделе Quickstart: создание нового клиента в Microsoft Entra ID.
- Приложение Spring Boot. Если у вас его нет, создайте проект Maven, используя Spring Initializr. Обязательно выберите Maven Project и в разделе Dependencies добавьте Spring Web, OAuth2 Resource Server и Microsoft Entra ID и выберите Java версии 8 или более поздней.
Это важно
Для выполнения действий, описанных в этой статье, требуется spring Boot версии 2.5 или более поздней.
Регистрация REST API
Выполните следующие действия, чтобы зарегистрировать веб-API на портале Azure.
Войдите на портал Azure.
Если у вас есть доступ к нескольким клиентам, используйте фильтр каталогов и подписок (
) для выбора клиента, в котором требуется зарегистрировать приложение.Найдите и выберите Microsoft Entra ID.
В разделе Manage выберите App registrations>New registration.
Введите имя приложения в поле "Имя ", например
Api-SurveyService. Пользователи приложения могут увидеть это имя, и вы можете изменить его позже.Для поддерживаемых типов учетных записей выберите "Учетные записи" в любом каталоге организации.
Выберите Зарегистрировать, чтобы создать приложение.
На странице приложения Обзор найдите идентификатор приложения (клиента) и запишите его, чтобы использовать позже. Вам потребуется настроить файл конфигурации YAML для этого проекта.
В разделе "Управление" выберите "Открыть API">"Добавить область действия". Примите предлагаемый URI идентификатора приложения (
api://{clientId}) , выбрав "Сохранить и продолжить", а затем введите следующие сведения:- В поле Имя области введите
Survey.User. - Для , кто может предоставить согласие, выберите Администраторы и пользователи.
- Для отображаемого имени согласия администратора введите
Access the survey service as a user.. - Для описания согласия администраторавведите
Allows the users to write data in survey system.. - В поле отображаемое имя согласия пользователявведите
Access the survey service as a user.. - Для описания согласия пользователявведите
Allows the users to write data in survey system.. - Для параметра Состояние оставьте значение Включено.
- Выберите Добавить область.
- В поле Имя области введите
Повторите предыдущий шаг, чтобы добавить другую область. При выборе Добавить областьвведите следующие сведения:
- В поле Имя области введите
Survey.Admin. - Для , кто может предоставить согласие, выберите Администраторы и пользователи.
- Для отображаемого имени согласия администратора введите
Access the survey service as a admin.. - Для описания согласия администраторавведите
Allows the users to view data in survey system.. - В поле отображаемое имя согласия пользователявведите
Access the survey service as a admin.. - Для описания согласия пользователявведите
Allows the users to view data in survey system.. - Для параметра Состояние оставьте значение Включено.
- Выберите Добавить область.
- В поле Имя области введите
Включите стартер Spring Cloud Azure Microsoft Entra ID
Затем включите защиту REST API с помощью Spring Cloud Azure.
Добавление зависимостей безопасности
Чтобы установить модуль Spring Cloud Azure Starter для Azure Active Directory, добавьте следующие зависимости в файл pom.xml:
Список компонентов (BOM) Spring Cloud для Azure
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Примечание.
Если вы используете Spring Boot 4.0.x, обязательно установите версию, указанную в
spring-cloud-azure-dependencies, на значение7.1.0.Если вы используете Spring Boot 3.5.x, обязательно задайте версию
spring-cloud-azure-dependenciesна6.1.0.Если вы используете Spring Boot 3.1.x-3.5.x, обязательно установите для нее версию
spring-cloud-azure-dependenciesна5.25.0.Если вы используете Spring Boot 2.x, обязательно установите версию
spring-cloud-azure-dependenciesна4.20.0.Эта ведомость материалов (BOM) должна быть сконфигурирована в
<dependencyManagement>разделе файла pom.xml. Это гарантирует, что все зависимости Spring Cloud Azure используют одну и ту же версию.Дополнительные сведения о версии, используемой для этого BOM, можно найти в разделе Какую версию Spring Cloud Azure мне следует использовать?.
Артефакт Microsoft Entra для Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory</artifactId> </dependency>Артефакт стартового сервера ресурсов OAuth2 Spring Boot.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
Авторизация HTTP-запросов
Чтобы защитить REST API опроса, добавьте заметку @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") с конкретным именем области, чтобы включить защиту, как показано в следующем примере:
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.LinkedHashMap;
import java.util.Map;
@RestController
@RequestMapping("/api/survey")
public class SurveyController {
private static final String QUESTION = "Which sports do you like most?";
private final Map<LocalDateTime, String> surveys = new LinkedHashMap<>();
@GetMapping(value = "/question", produces = MediaType.APPLICATION_JSON_VALUE)
public String question() {
return QUESTION;
}
@PostMapping
@PreAuthorize("hasAuthority('SCOPE_Survey.User')")
public String addAnswer(@RequestParam("answer") String answer) {
if (StringUtils.hasText(answer)) {
surveys.put(LocalDateTime.now(), answer);
return "succeeded";
}
return "Failed";
}
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasAuthority('SCOPE_Survey.Admin')")
public Map<LocalDateTime, String> list() {
return surveys;
}
}
Обновите конфигурацию YAML, как показано в следующем примере:
spring:
cloud:
azure:
active-directory:
enabled: true
credential:
client-id: <your-application-ID-of-Api-SurveyService>
app-id-uri: <your-application-ID-URI-of-Api-SurveyService>
Примечание.
В маркерах версии 1.0 конфигурация требует идентификатор клиента API, а в маркерах версии 2.0 можно использовать идентификатор клиента или URI идентификатора приложения в запросе. Вы можете настроить оба элемента для корректного выполнения проверки аудитории.
Развертывание в Azure Spring Apps
После локального запуска приложения Spring Boot его можно переместить в рабочую среду. Azure Spring Apps упрощает развертывание приложений Spring Boot для Azure без каких-либо изменений кода. Служба управляет инфраструктурой приложений Spring, чтобы разработчики могли сосредоточиться на коде. Azure Spring Apps обеспечивает управление жизненным циклом с помощью комплексного мониторинга и диагностики, управления конфигурацией, обнаружения служб, интеграции CI/CD, развертывания по схеме blue-green и многого другого. Дополнительные сведения см. в статье Quickstart: развертывание первого приложения в Azure Spring Apps.