Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как активировать защиту 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 (JDK) версии 8 или более поздней.
- Apache Maven
- Azure CLI
- Экземпляр Microsoft Entra. Для получения инструкций по созданию см Краткое руководство: создание нового клиента в 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.
В разделе Управлениевыберите Регистрации приложений>Новая регистрация.
Введите имя приложения в поле "Имя ", например
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 Starter Microsoft Entra ID
Затем включите защиту REST API с помощью Spring Cloud Azure.
Добавление зависимостей безопасности
Чтобы установить модуль Spring Cloud Azure Starter Azure Active Directory, добавьте следующие зависимости в файл pom.xml:
Составная спецификация Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.22.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Примечание.
Если вы используете 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, выполнения сине-зеленых развертываний и прочего. Дополнительные сведения см. в статье Краткое руководство. Развертывание первого приложения Azure Spring Apps.