Поделиться через


Руководство по проверке подлинности клиента с помощью Spring Cloud Gateway в Azure Spring Apps

Примечание.

Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.

Эта статья относится к:✅ стандартное потребление и выделенное (предварительная версия)

В этом кратком руководстве показано, как защитить обмен данными между клиентским приложением и приложением микрослужбы, размещенным в Azure Spring Apps и экранированных с помощью приложения Spring Cloud Gateway. Клиентское приложение проверяется как субъект безопасности, чтобы инициировать контакт с микрослужбой, развернутой в Azure Spring Apps, с помощью приложения, созданного с помощью Spring Cloud Gateway. Этот метод использует функции Ретранслятора маркеров и сервера ресурсов Spring Security Spring Cloud для процессов проверки подлинности и авторизации, реализованных путем выполнения потока учетных данных клиента OAuth 2.0.

В следующем списке показана композиция примера проекта:

  • Книги SPA: это одностраничное приложение (SPA), размещенное локально, взаимодействует с микрослужбой книг для добавления или поиска книг.
  • Микрослужба книг:
    • Приложение Spring Cloud Gateway, размещенное в Azure Spring Apps. Это приложение работает в качестве шлюза в API-интерфейсы RESTful книг.
    • Приложение API Spring Boot RESTful, размещенное в Azure Spring Apps. Это приложение хранит сведения о книге в базе данных H2. Служба книг предоставляет две конечные точки REST для записи и чтения книг.

1. Предварительные требования

2. Подготовка проекта Spring

Выполните следующие действия, чтобы клонировать и запустить приложение локально:

  1. Используйте следующую команду, чтобы клонировать пример проекта из GitHub:

    git clone https://github.com/Azure-Samples/azure-spring-apps-sso-client-credential.git -b consumption-plan
    
  2. Используйте следующую команду, чтобы создать серверные службы книги:

    cd azure-spring-apps-sso-client-credential
    ./mvnw clean package
    
  3. Введите каталог проекта SPA и выполните следующую команду, чтобы установить зависимости:

    npm install @azure/msal-node
    

3. Подготовка облачной среды

Основными ресурсами, необходимыми для запуска этого примера, являются экземпляр Azure Spring Apps и экземпляр База данных Azure для PostgreSQL. В этом разделе приведены действия по созданию этих ресурсов.

3.1. Войдите на портал Azure

Откройте веб-браузер и перейдите к портал Azure. Введите учетные данные для входа в портал Azure. Панель мониторинга службы является представлением по умолчанию.

3.2. Создание экземпляра Azure Spring Apps

Чтобы создать экземпляр службы, выполните следующие действия.

  1. Выберите "Создать ресурс" в углу портал Azure.

  2. Выберите Compute>Azure Spring Apps.

    Снимок экрана: портал Azure, на котором показана страница

  3. Заполните форму Основные данные , указав следующую информацию:

    Параметр Предлагаемое значение Description
    Подписка Имя подписки. Подписка Azure, которую вы хотите использовать для сервера. Если у вас есть несколько подписок, выберите ту, через которую вы предпочитаете оплачивать этот ресурс.
    Группа ресурсов myresourcegroup Новое имя группы ресурсов или уже имеющееся из подписки.
    Имя myasa Уникальное имя, определяющее службу Azure Spring Apps. Его длина должна быть от 4 до 32 знаков. Имя может содержать только строчные буквы, цифры и дефисы. Первым символом в имени службы должна быть буква, а последним — буква или цифра.
    План Стандартное потребление и выделенное (предварительная версия) План ценообразования определяет ресурсы и затраты, связанные с вашим экземпляром.
    Регион Ближайший к пользователям регион Ближайшее к пользователям расположение.
    Среда приложений-контейнеров myacaenv Выберите экземпляр среды контейнеров для совместного использования одной виртуальной сети с другими службами и ресурсами.

    Снимок экрана: портал Azure, на котором показана страница плана потребления Azure Spring Apps.

    Используйте следующую таблицу в качестве руководства для создания среды приложений контейнеров:

    Параметр Предлагаемое значение Description
    Имя среды myacaenv Уникальное имя, определяющее службу среды приложений контейнеров Azure.
    План Потребление План ценообразования определяет ресурсы и затраты, связанные с вашим экземпляром.
    Избыточность между зонами Отключен Создание службы среды приложений контейнеров в зоне доступности Azure.

    Снимок экрана: портал Azure, на котором показана страница

    Внимание

    Профиль рабочей нагрузки потребления имеет модель выставления счетов по мере использования без начальной стоимости. Плата за выделенный профиль рабочей нагрузки взимается на основе подготовленных ресурсов. Дополнительные сведения см. в статьях "Профили рабочей нагрузки" в средах структуры "Потребление и выделенный план" в службах контейнеров Azure (предварительная версия) и ценах на Azure Spring Apps.

  4. Выберите "Рецензирование" и " Создать ", чтобы просмотреть выбранные варианты. Выберите "Создать", чтобы подготовить экземпляр Azure Spring Apps.

  5. На панели инструментов щелкните значок Уведомления (колокольчик), чтобы отслеживать процесс развертывания. После завершения развертывания можно выбрать "Закрепить на панели мониторинга", которая создает плитку для этой службы на панели мониторинга портал Azure в качестве ярлыка на странице обзора службы. Выберите "Перейти к ресурсу", чтобы открыть страницу обзора службы.

    Снимок экрана: портал Azure, на котором показана страница обзора с открытой областью уведомлений.

  6. Используйте следующую команду, чтобы включить сервер Eureka. Обязательно замените заполнители собственными значениями, созданными на предыдущем шаге.

    az spring eureka-server enable \
        --resource-group <resource-group-name> \
        --name <Azure-Spring-Apps-instance-name>
    

3.3. Регистрация приложения Книги

В этом разделе приведены шаги по регистрации приложения для добавления ролей приложений в идентификатор Microsoft Entra ID, который используется для защиты API RESTful в Azure Spring Apps.

  1. Перейдите на домашнюю страницу портал Azure.

  2. Если у вас есть доступ к нескольким клиентам, используйте фильтр каталогов и подписок ( ) для выбора клиента, в котором требуется зарегистрировать приложение.

  3. Найдите и выберите Microsoft Entra ID.

  4. В разделе Управление выберите Регистрация приложений>Создать регистрацию.

  5. Введите имя приложения в поле "Имя ", например "Книги". Пользователи приложения могут видеть это имя. Вы можете изменить его позже.

  6. Для параметра Поддерживаемые типы учетных записей выберите Учетные записи только в этом каталоге организации.

  7. Выберите Зарегистрировать, чтобы создать приложение.

  8. На странице приложения Обзор найдите идентификатор приложения (клиента) и запишите его, чтобы использовать позже. Вам потребуется настроить файл конфигурации YAML для этого проекта.

  9. В разделе "Управление" выберите "Предоставить API", найдите URI идентификатора приложения в начале страницы и нажмите кнопку "Добавить".

  10. На странице "Изменение идентификатора приложения" примите предлагаемый URI идентификатора приложения (api://{client ID}) или используйте понятное имя вместо идентификатора клиента, например api://books, а затем нажмите кнопку "Сохранить".

  11. В разделе "Управление" выберите ">Создать роль приложения" и введите следующие сведения:

    • В поле Отображаемое имя введите запись.
    • Для типов разрешенных элементов выберите "Приложения".
    • Для значения введите Books.Write.
    • В поле "Описание" введите "Добавление книг".
  12. Повторите предыдущий шаг, чтобы добавить другую роль приложения: Books.Read

    Снимок экрана: страница регистрации приложения книги, на котором показаны роли приложения.

3.4. Регистрация одностраничного приложения

Приложение API RESTful книг выступает в качестве сервера ресурсов, защищенного идентификатором Microsoft Entra. Перед получением маркера доступа необходимо зарегистрировать другое приложение в идентификаторе Microsoft Entra и предоставить разрешения клиентскому приложению, которое называется SPA.

  1. Вернитесь к клиенту в идентификаторе Microsoft Entra.

  2. В разделе Управление выберите Регистрация приложений>Создать регистрацию.

  3. Введите имя приложения в поле "Имя ", например SPA.

  4. Для поддерживаемых типов учетных записей используйте учетные записи по умолчанию только в этом каталоге организации.

  5. Выберите Зарегистрировать, чтобы создать приложение.

  6. На странице приложения Обзор найдите идентификатор приложения (клиента) и запишите его, чтобы использовать позже. Он необходим для получения маркера доступа.

  7. Последовательно выберите Разрешения API>Add a permission (Добавить разрешение)>Интерфейсы API, используемые моей организацией. Books Выберите приложение, зарегистрированное ранее, выберите разрешения Books.Read и Books.Write, а затем нажмите кнопку "Добавить разрешения".

  8. Выберите "Предоставить согласие администратора" для имени> клиента, <чтобы предоставить согласие администратора для добавленных разрешений.

    Снимок экрана: страница разрешений SPA API, на котором показаны разрешения API веб-приложения.

  9. Перейдите к сертификатам и секретам , а затем выберите новый секрет клиента.

  10. На странице "Добавление секрета клиента" введите описание секрета, выберите дату окончания срока действия и нажмите кнопку "Добавить".

  11. Найдите значение секрета и запишите его для последующего использования. Он необходим для получения маркера доступа.

3.5. Обновление конфигурации приложения службы книг

Найдите файл book-service/src/main/resources/application.yml для books-service приложения. Обновите конфигурацию в spring.cloud.azure.active-directory разделе, чтобы она соответствовала следующему примеру. Обязательно замените заполнители значениями, созданными ранее.

spring:
  cloud:
    azure:
      active-directory:
        credential:
          client-id: <your-application-ID-of-Books>
        app-id-uri: <your-application-ID-URI-of-Books>

Чтобы перестроить пример проекта, используйте следующую команду:

./mvnw clean package

4. Развертывание приложений в Azure Spring Apps

Ниже показано, как развернуть приложения в Azure.

4.1. Развертывание приложений микрослужб в Azure Spring Apps

Выполните следующие действия, чтобы развернуть приложения в Azure Spring Apps с помощью подключаемого модуля Maven для Azure Spring Apps:

  1. Перейдите в пример каталога проекта и выполните следующую команду, чтобы настроить приложение в Azure Spring Apps:

    ./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.18.0:config
    

    В следующем списке описаны взаимодействия с командами:

    • Выберите дочерние модули для настройки (входные номера, разделенные запятыми, например[1-2,4,6], ВВОД, чтобы выбрать ALL): нажмите клавишу ВВОД , чтобы выбрать все.
    • Вход OAuth2: авторизация входа в Azure на основе протокола OAuth2.
    • Выберите подписку: выберите номер списка подписок созданного экземпляра Azure Spring Apps, который по умолчанию соответствует первой подписке в списке. Если вы используете номер по умолчанию, нажмите клавишу ВВОД напрямую.
    • Выберите Azure Spring Apps для развертывания: выберите список созданного экземпляра Azure Spring Apps. Если вы используете номер по умолчанию, нажмите клавишу ВВОД напрямую.
    • Выберите приложения для предоставления общедоступного доступа: (входные номера, разделенные запятыми, например[ [1-2,4,6], ВВОД, чтобы выбрать NONE): введите 1 для gateway-service.
    • Подтвердите сохранение всех указанных выше конфигураций (Y/n): введите y. Если ввести n, конфигурация не сохраняется в POM-файлах.
  2. Чтобы развернуть приложение, используйте следующую команду:

    ./mvnw azure-spring-apps:deploy
    

    В следующем списке описывается взаимодействие с командой:

    • Вход OAuth2: необходимо авторизовать имя входа в Azure на основе протокола OAuth2.

    После выполнения команды вы увидите следующие сообщения журнала, которые указывают на успешное развертывание.

    [INFO] Getting public url of app(gateway-service)...
    [INFO] Application url: https://gateway-service.xxxxxxxxxxxxxx-xxxxxxxx.eastasia.azurecontainerapps.io
    
    ...
    
    [INFO] Artifact(books-service-0.0.1-SNAPSHOT.jar) is uploaded and deployment(default) is successfully updated.
    
    ...
    

    Url-адрес выходного приложения — это базовая конечная точка для доступа к приложению API ToDo RESTful.

4.2. Локальное запуск приложения SPA

Обновите конфигурацию в SPA spa/server.js файла скрипта приложения, чтобы она соответствовала следующему примеру. Обязательно замените заполнители собственными значениями, созданными на предыдущем шаге.

const SpringCloudGatewayURL = "<URL exposed by app gateway-service>"

const msalConfig = {
    auth: {
        clientId: "< SPA App Registration ClientId>",
        authority: "https://login.microsoftonline.com/< TenantId >/",
        clientSecret: "<SPA App Registration ClientSecret>",
    },
};

const tokenRequest = {
    scopes: ["<Application ID URI of Books>/.default"]
};

В каталоге проекта SPA выполните следующую команду, чтобы выполнить локально:

node server.js

Примечание.

Приложение SPA — это статическое веб-приложение, которое можно развернуть на любом веб-сервере.

5. Проверка приложения

Вы можете получить доступ к приложению SPA книги, которое взаимодействует с API RESTful книги gateway-service через приложение.

  1. Перейдите http://localhost:3000 в браузер, чтобы получить доступ к приложению.

  2. Введите значения для "Автор " и "Заголовок", а затем нажмите кнопку "Добавить книгу". Вы увидите ответ, аналогичный следующему примеру:

    Book added successfully: {"id":1,"author":"Jeff Black","title":"Spring In Action"}
    

6. Очистка ресурсов

Вы можете удалить группу ресурсов Azure, которая содержит все связанные ресурсы. Чтобы удалить всю группу ресурсов, включая только что созданную службу, выполните следующие действия.

  1. Найдите группу ресурсов на портале Azure.

  2. Выберите группы ресурсов и выберите имя группы ресурсов, например myresourcegroup.

  3. На странице группы ресурсов щелкните Удалить. Введите имя группы ресурсов в текстовом поле, чтобы подтвердить удаление.

  4. Выберите команду Удалить.

7. Дальнейшие действия

Дополнительные сведения см. в следующих статьях: