Защита приложений Java Spring Boot с помощью групп и утверждений групп
В этой статье показано веб-приложение Java Spring Boot, использующее клиентская библиотека Microsoft Entra ID Spring Boot Starter для Java для проверки подлинности, авторизации и получения маркеров. Приложение использует протокол OpenID Connect для входа пользователей и ограничивает доступ к страницам на основе членства в группе безопасности Идентификатора Майкрософт.
На следующей схеме показана топология приложения:
Клиентское приложение использует клиентную библиотеку Microsoft Entra ID Spring Boot Starter для Java для входа пользователей в клиент идентификатора Microsoft Entra ID и получения маркера идентификатора из идентификатора Microsoft Entra ID.
Маркер идентификатора содержит утверждение групп. Приложение загружает утверждения в список Spring GrantedAuthorities
для пользователя, вошедшего в систему. Эти значения определяют, какие страницы пользователь может получить доступ.
Видео, охватывающее этот сценарий, см. в статье "Реализация авторизации в приложениях с помощью ролей приложений, групп безопасности, областей и ролей каталога".
Необходимые компоненты
- JDK версии 15. Этот пример был разработан в системе с Java 15, но он может быть совместим с другими версиями.
- Maven 3
- Пакет расширений Java для Visual Studio Code рекомендуется запустить этот пример в Visual Studio Code.
- Клиент идентификатора Microsoft Entra. Дополнительные сведения см . в кратком руководстве по настройке клиента.
- Учетная запись пользователя в клиенте Идентификатора Microsoft Entra. Этот пример не работает с личной учетной записью Майкрософт. Таким образом, если вы вошли в портал Azure с помощью личная учетная запись и у вас нет учетной записи пользователя в каталоге, необходимо создать ее сейчас.
- Две группы безопасности, именованные
AdminGroup
иUserGroup
содержащие пользователя или пользователей, которые вы хотите подписать и проверить этот пример. Кроме того, можно добавить пользователя в две существующие группы безопасности в клиенте. Если вы решили использовать существующие группы, обязательно измените образец конфигурации, чтобы использовать имя и идентификатор объекта существующих групп безопасности. - Visual Studio Code
- Инструменты Azure для Visual Studio Code
Рекомендации
- Некоторые знания о Spring Framework.
- Некоторые знания о терминале Linux/OSX.
- jwt.ms для проверки маркеров.
- Fiddler для мониторинга активности сети и устранения неполадок.
- Следуйте блогу по идентификатору Microsoft Entra ID, чтобы оставаться в курсе последних разработок.
Настройка примера
В следующих разделах показано, как настроить пример приложения.
Клонирование или скачивание примера репозитория
Чтобы клонировать пример, откройте окно Bash и выполните следующую команду:
git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/groups
Кроме того, перейдите к репозиторию ms-identity-msal-java-samples , а затем скачайте его в виде файла .zip и извлеките его на жесткий диск.
Внимание
Чтобы избежать ограничений длины пути к файлам в Windows, клонируйте или извлеките репозиторий в каталог рядом с корнем жесткого диска.
Регистрация примера приложения в клиенте Идентификатора Microsoft Entra
В этом примере есть один проект. В следующих разделах показано, как зарегистрировать приложение с помощью портал Azure.
Выберите клиент Идентификатора Microsoft Entra, в котором вы хотите создать приложения
Чтобы выбрать клиент, выполните следующие действия.
Войдите на портал Azure.
Если ваша учетная запись присутствует в нескольких клиентах идентификатора Microsoft Entra ID, выберите профиль в углу портал Azure, а затем выберите "Переключить каталог", чтобы изменить сеанс на нужный клиент Идентификатора Microsoft Entra.
Регистрация приложения (java-spring-webapp-groups)
Чтобы зарегистрировать приложение, выполните следующие действия.
Перейдите к портал Azure и выберите идентификатор Microsoft Entra.
Выберите "Регистрация приложений" на панели навигации и выберите "Создать регистрацию".
На появившемся экране "Регистрация приложения" введите следующие сведения о регистрации приложения:
- В разделе "Имя" введите понятное имя приложения для отображения пользователям приложения, например
java-spring-webapp-groups
. - В разделе Поддерживаемые типы учетных записей выберите Учетные записи только в этом каталоге организации.
- В разделе URI перенаправления (необязательно) выберите веб-файл в поле со списком и введите следующий URI перенаправления:
http://localhost:8080/login/oauth2/code/
- В разделе "Имя" введите понятное имя приложения для отображения пользователям приложения, например
Выберите Зарегистрировать, чтобы создать приложение.
На странице регистрации приложения найдите и скопируйте значение идентификатора приложения (клиента), которое будет использоваться позже. Это значение используется в файле конфигурации или файлах приложения.
На странице регистрации приложения выберите сертификаты и секреты на панели навигации, чтобы открыть страницу, где можно создать секреты и отправить сертификаты.
В разделе Секреты клиента выберите Создать секрет клиента.
Введите описание, например секрет приложения.
Выберите одну из доступных продолжительности: 6 месяцев, 12 месяцев или настраиваемую.
Выберите Добавить. Отображается созданное значение.
Скопируйте и сохраните созданное значение для использования в последующих шагах. Это значение требуется для файлов конфигурации кода. Это значение не отображается снова, и его нельзя получить другими средствами. Таким образом, не забудьте сохранить его из портал Azure перед переходом на любой другой экран или область.
На странице регистрации приложения выберите разрешения API на панели навигации, чтобы открыть страницу, в которой можно добавить доступ к API, необходимым приложению.
Выберите Добавить разрешение.
Убедитесь, что выбрана вкладка API Майкрософт.
В разделе Часто используемые интерфейсы API Microsoft выберите Microsoft Graph.
В разделе "Делегированные разрешения" выберите GroupMember.Read.All из списка. При необходимости используйте поле поиска. Это разрешение необходимо для получения членства в группах через Graph, если происходит сценарий чрезмерного использования.
Нажмите кнопку, чтобы предоставить согласие администратора.
GroupMember.Read.All
Выберите Добавить разрешения.
Создание групп безопасности
Чтобы создать группы безопасности, выполните следующие действия.
Перейдите к портал Azure и выберите идентификатор Microsoft Entra.
Выберите группы на панели навигации.
В области "Группы" выберите "Создать группу", а затем укажите следующие сведения:
- Для типа группы выберите "Безопасность".
- Для имени группы введите AdminGroup.
- В поле "Описание группы" введите группу безопасности администратора.
- Добавьте владельцев групп и участников группы, которые вы хотите использовать и протестировать в этом примере.
- Нажмите кнопку создания.
В области "Группы" выберите "Создать группу", а затем укажите следующие сведения:
- Для типа группы выберите "Безопасность".
- Для имени группы введите UserGroup.
- В поле "Описание группы" введите группу безопасности пользователей.
- Добавьте владельцев групп и участников группы, которые вы хотите использовать и протестировать в этом примере.
- Нажмите кнопку создания.
Дополнительные сведения см. в разделе Управление группами Microsoft Entra и членство в группах.
Настройка групп безопасности
У вас есть следующие параметры по настройке приложения для получения утверждения групп:
Получение всех групп, которым назначен пользователь, вошедшего в систему, в клиенте идентификатора Microsoft Entra, включены вложенные группы. Дополнительные сведения см. в разделе "Настройка приложения для получения всех групп, которым назначен пользователь, вошедшего в систему", включая вложенные группы.
Получение значений утверждений групп из отфильтрованного набора групп, с которыми приложение запрограммировано для работы. Дополнительные сведения см. в разделе "Настройка приложения для получения значений утверждений групп из отфильтрованного набора групп, которым может быть назначен пользователь". Этот параметр недоступен в выпуске Microsoft Entra ID Free.
Примечание.
Сведения о получении локальной группы samAccountName
или On Premises Group Security Identifier
вместо идентификатора группы см. в разделе "Предварительные требования для использования атрибутов групп, синхронизированных из Active Directory " в разделе "Настройка утверждений группы для приложений с помощью идентификатора Microsoft Entra".
Настройте приложение для получения всех групп, которым назначен пользователь, вошедшего в систему, включая вложенные группы.
Чтобы настроить приложение, выполните следующие действия.
На странице регистрации приложения выберите "Конфигурация маркера" на панели навигации, чтобы открыть страницу, в которой можно настроить предоставленные утверждения маркерами, выданными приложению.
Выберите " Добавить утверждения групп", чтобы открыть экран "Изменение утверждений групп ".
Выберите группы безопасности ИЛИ все группы (включая списки рассылки, но не группы, назначенные приложению). Выбор обоих отрицает эффект параметра "Группы безопасности".
В разделе "Идентификатор" выберите идентификатор группы. Этот выбор приводит к тому, что идентификатор Microsoft Entra отправляет идентификатор объекта групп, которым назначается пользователь, в утверждениях групп маркера идентификатора, который ваше приложение получает после входа пользователя.
Настройка приложения для получения значений утверждений групп из отфильтрованного набора групп, которым может быть назначен пользователь.
Этот параметр полезен при выполнении следующих случаев:
- Ваше приложение заинтересовано в выбранном наборе групп, которым может быть назначен пользователь, выполняющий вход.
- Ваше приложение не заинтересовано в каждой группе безопасности, назначенной этому пользователю в клиенте.
Этот параметр помогает приложению избежать проблемы с переполнением.
Примечание.
Эта функция недоступна в выпуске Microsoft Entra ID Free.
Вложенные назначения групп недоступны при использовании этого параметра.
Чтобы включить этот параметр в приложении, выполните следующие действия.
На странице регистрации приложения выберите "Конфигурация маркера" на панели навигации, чтобы открыть страницу, в которой можно настроить предоставленные утверждения маркерами, выданными приложению.
Выберите " Добавить утверждения групп", чтобы открыть экран "Изменение утверждений групп ".
Выберите группы, назначенные приложению , и не выбирайте другие параметры. Если выбрать дополнительные параметры, например группы безопасности или все группы (включая списки рассылки, но не группы, назначенные приложению), эти параметры не влияют на влияние групп, назначенных параметру приложения .
В разделе "Идентификатор" выберите идентификатор группы. Этот выбор приводит к тому, что идентификатор Microsoft Entra отправляет идентификатор объекта групп, которым назначается пользователь, в утверждениях групп маркера идентификатора, который ваше приложение получает после входа пользователя.
Если вы предоставляете веб-API с помощью параметра "Предоставить API ", можно также выбрать параметр идентификатора группы в разделе Access . Этот выбор приводит к тому, что идентификатор Microsoft Entra отправляет идентификатор объекта групп, которым назначается пользователь, в утверждениях групп маркера доступа, выданного клиентским приложениям API.
На странице регистрации приложения выберите "Обзор " на панели навигации, чтобы открыть экран обзора приложения.
Выберите гиперссылку с именем приложения в управляемом приложении в локальном каталоге. Это название поля может быть усечено, например управляемое приложение в .... При выборе этой ссылки перейдите на страницу обзора корпоративных приложений, связанную с субъектом-службой приложения в клиенте, где вы создали его. Вы можете вернуться на страницу регистрации приложения с помощью кнопки "Назад" браузера.
Выберите пользователей и группы на панели навигации, чтобы открыть страницу, в которой можно назначить пользователей и группы приложению.
Выберите Добавить пользователя.
Выберите пользователя и группы на результирующем экране.
Выберите группы, которые нужно назначить этому приложению.
Выберите "Выбрать ", чтобы завершить выбор групп.
Нажмите кнопку " Назначить" , чтобы завершить процесс назначения группы.
Теперь приложение получает эти выбранные группы в утверждении групп, когда пользователь войдя в приложение является членом одной или нескольких назначенных групп.
Выберите "Свойства " на панели навигации, чтобы открыть страницу, в которую перечислены основные свойства приложения. Задайте обязательное назначение пользователя? Флаг "Да".
Внимание
Если необходимо задать назначение пользователей? Идентификатор Microsoft Entra ID проверяет, что только пользователи, назначенные приложению в области "Пользователи и группы", могут войти в приложение. Вы можете назначить пользователей напрямую или назначить группы безопасности, к которым они относятся.
Настройте пример кода для использования групп регистрации и безопасности приложения (java-spring-webapp-groups)
Чтобы настроить приложение, выполните следующие действия.
Примечание.
В следующих шагах ClientID
выполняется то же самое, что Application ID
и AppId
.
Откройте проект в интегрированной среде разработки.
Откройте файл src\main\resources\application.yml.
Найдите заполнитель
Enter_Your_Tenant_ID_Here
и замените существующее значение идентификатором клиента Microsoft Entra.Найдите заполнитель
Enter_Your_Client_ID_Here
и замените существующее значение идентификатором приложения илиclientId
java-spring-webapp-groups
приложением, скопированным из портал Azure.Найдите заполнитель
Enter_Your_Client_Secret_Here
и замените существующее значение значением, сохраненным во время создания скопированногоjava-spring-webapp-groups
из портал Azure.Найдите заполнитель
Enter_Your_Admin_Group_ID_Here
и замените существующее значениеobjectId
значением adminGroup.Найдите заполнитель
Enter_Your_User_Group_ID_Here
и замените существующее значениеobjectId
значением userGroup.Откройте файл src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java.
Найдите заполнитель
Enter_Your_Admin_Group_ID_Here
и замените существующее значениеobjectId
значением adminGroup.Найдите заполнитель
Enter_Your_User_Group_ID_Here
и замените существующее значениеobjectId
значением userGroup.
Запуск примера
В следующих разделах показано, как развернуть пример в приложениях контейнеров Azure.
Необходимые компоненты
- Учетная запись Azure. Если ее нет, создайте бесплатную учетную запись. Чтобы продолжить, вам потребуется разрешение участника или владельца подписки Azure. Дополнительные сведения см. в разделе Назначение ролей Azure с помощью портала Azure.
- Интерфейс командной строки Azure.
- Расширение ИНТЕРФЕЙСА командной строки для приложений контейнеров Azure или более поздней версии
0.3.47
. Чтобы установить последнюю версию, используйтеaz extension add --name containerapp --upgrade --allow-preview
команду. - Пакет средств разработки Java версии 17 или более поздней.
- Maven.
Подготовка проекта Spring
Чтобы подготовить проект, выполните следующие действия.
Чтобы создать проект, используйте следующую команду Maven :
mvn clean verify
Запустите пример проекта локально с помощью следующей команды:
mvn spring-boot:run
Настройка
Чтобы войти в Azure из ИНТЕРФЕЙСА командной строки, выполните следующую команду и следуйте инструкциям, чтобы завершить процесс проверки подлинности.
az login
Чтобы убедиться, что вы используете последнюю версию интерфейса командной строки, выполните команду обновления.
az upgrade
Затем установите или обновите расширение "Приложения контейнеров Azure" для интерфейса командной строки.
Если при выполнении az containerapp
команд в Azure CLI возникают ошибки, связанные с отсутствующими параметрами, убедитесь, что установлена последняя версия расширения azure Container Apps.
az extension add --name containerapp --upgrade
Примечание.
Начиная с мая 2024 г. расширения Azure CLI больше не поддерживают предварительные версии функций по умолчанию. Чтобы получить доступ к функциям предварительной версии контейнерных приложений, установите расширение "Приложения контейнеров" с --allow-preview true
помощью .
az extension add --name containerapp --upgrade --allow-preview true
Теперь, когда установлено текущее расширение или модуль, зарегистрируйте Microsoft.App
пространства имен и Microsoft.OperationalInsights
пространств имен.
Примечание.
Ресурсы Контейнеров приложений Azure перенесены из пространства имен Microsoft.Web
в пространство имен Microsoft.App
. Дополнительные сведения см. в статье о миграции пространства имен из Microsoft.Web в Microsoft.App в марте 2022 г..
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Создание среды "Приложения контейнеров Azure"
После завершения настройки Azure CLI вы можете определить переменные среды, которые используются в этой статье.
Определите следующие переменные в оболочке Bash.
export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"
Создать группу ресурсов.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION \
Создайте среду с автоматически созданной рабочей областью Log Analytics.
az containerapp env create \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location $LOCATION
Отображение домена по умолчанию среды приложения контейнера. Запишите этот домен для использования в последующих разделах.
az containerapp env show \
--name $ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--query properties.defaultDomain
Подготовка приложения к развертыванию
При развертывании приложения в приложениях контейнеров Azure URL-адрес перенаправления изменяется на URL-адрес перенаправления развернутого экземпляра приложения в приложениях контейнеров Azure. Чтобы изменить эти параметры в файле application.yml , выполните следующие действия.
Перейдите к файлу src\main\resources\application.yml приложения и измените значение
post-logout-redirect-uri
доменного имени развернутого приложения, как показано в следующем примере. Обязательно замените<API_NAME>
<default-domain-of-container-app-environment>
и на ваши фактические значения. Например, с доменом по умолчанию для среды приложения контейнеров Azure из предыдущего шага иms-identity-api
для имени приложения вы будете использоватьhttps://ms-identity-api.<default-domain>
значениеpost-logout-redirect-uri
.post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
После сохранения этого файла используйте следующую команду, чтобы перестроить приложение:
mvn clean package
Внимание
Файл application.yml приложения в настоящее время содержит значение секрета клиента в параметре client-secret
. Не рекомендуется хранить это значение в этом файле. Вы также можете рисковать, если зафиксировать файл в репозитории Git. Рекомендуемый подход см. в статье "Управление секретами в приложениях контейнеров Azure".
Обновление регистрации приложения идентификатора Microsoft Entra
Так как URI перенаправления изменяется в развернутом приложении в приложениях контейнеров Azure, необходимо также изменить URI перенаправления в регистрации приложения Идентификатора Microsoft Entra. Чтобы внести это изменение, выполните следующие действия:
Перейдите на страницу Регистрация приложений Платформы удостоверений Майкрософт для разработчиков.
Используйте поле поиска для поиска регистрации приложения, например
java-servlet-webapp-authentication
.Откройте регистрацию приложения, выбрав его имя.
Выберите Проверка подлинности в меню.
В разделе URI веб-перенаправления - выберите "Добавить URI".
Заполните универсальный код ресурса (URI) приложения, добавляя
/login/oauth2/code/
напримерhttps://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/
.Выберите Сохранить.
Развертывание приложения
Разверните пакет JAR в приложениях контейнеров Azure.
Примечание.
При необходимости можно указать версию JDK в переменных среды сборки Java. Дополнительные сведения см. в статье "Создание переменных среды для Java" в приложениях контейнеров Azure.
Теперь вы можете развернуть WAR-файл с помощью az containerapp up
команды CLI.
az containerapp up \
--name $API_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--environment $ENVIRONMENT \
--artifact <JAR_FILE_PATH_AND_NAME> \
--ingress external \
--target-port 8080 \
--query properties.configuration.ingress.fqdn
Примечание.
Версия JDK по умолчанию — 17. Если необходимо изменить версию JDK для совместимости с приложением, можно использовать --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION>
аргумент для настройки номера версии.
Дополнительные переменные среды сборки см. в статье "Создание переменных среды для Java" в приложениях контейнеров Azure.
Проверка приложения
В этом примере containerapp up
команда включает --query properties.configuration.ingress.fqdn
аргумент, который возвращает полное доменное имя (FQDN), также известное как URL-адрес приложения. Выполните следующие действия, чтобы проверить журналы приложения, чтобы изучить любую проблему развертывания:
Перейдите по URL-адресу выходного приложения на странице "Выходные данные" раздела "Развертывание".
На панели навигации на странице "Обзор экземпляра приложений контейнеров Azure" выберите журналы, чтобы проверить журналы приложения.
Анализ примера
Чтобы изучить пример, выполните следующие действия.
- Обратите внимание, что состояние входа или выхода отображается в центре экрана.
- Нажмите кнопку с учетом контекста в углу. Эта кнопка считывает вход при первом запуске приложения. Кроме того, выберите сведения о маркере, только администраторы или обычные пользователи. Так как эти страницы защищены и требуют проверки подлинности, вы автоматически перенаправляетесь на страницу входа.
- На следующей странице следуйте инструкциям и войдите с учетной записью в клиенте идентификатора Microsoft Entra ID.
- На экране согласия обратите внимание на запрашиваемые области.
- После успешного завершения потока входа необходимо перенаправить на домашнюю страницу, в которой отображается состояние входа или одна из других страниц в зависимости от того, какая кнопка активировала поток входа.
- Обратите внимание, что кнопка с учетом контекста теперь говорит выход и отображает имя пользователя.
- Если вы находитесь на домашней странице, выберите "Сведения о маркере идентификатора", чтобы просмотреть некоторые декодированные утверждения маркера идентификатора, включая группы.
- Выберите администраторов только для просмотра
/admin_only
. Только пользователи, принадлежащиеAdminGroup
группе безопасности, могут просматривать эту страницу. В противном случае отображается сообщение об ошибке авторизации. - Выберите "Обычные пользователи", чтобы просмотреть страницу
/regular_user
. Только пользователи, принадлежащиеUserGroup
группе безопасности, могут просматривать эту страницу. В противном случае отображается сообщение об ошибке авторизации. - Нажмите кнопку в углу, чтобы выйти из нее. Страница состояния отражает новое состояние.
Примечания о коде
В этом примере показано, как использовать клиентская библиотека Microsoft Entra ID Spring Boot Starter для Java для входа пользователей в клиент Идентификатора Microsoft Entra ID. В этом примере также используются начальные серверы клиента Spring Oauth2 и Spring Web. В примере используются утверждения из маркера идентификатора, полученного от идентификатора Microsoft Entra, для отображения сведений о входе пользователя и ограничения доступа к некоторым страницам с помощью утверждения групп для авторизации.
Содержимое
В следующей таблице показано содержимое папки примера проекта:
Файл или папка | Description |
---|---|
pom.xml | Зависимости приложений. |
src/main/resources/templates/ | Шаблоны Thymeleaf для пользовательского интерфейса. |
src/main/resources/application.yml | Конфигурация начальной библиотеки начального начального файла приложения и идентификатора Microsoft Entra. |
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ | Этот каталог содержит основные классы входа приложения, контроллера и конфигурации. |
.../MsIdentitySpringBootWebappApplication.java | Основной класс. |
.../SampleController.java | Контроллер с сопоставлениями конечных точек. |
.../SecurityConfig.java | Конфигурация безопасности— например, маршруты, для которых требуется проверка подлинности. |
.../Utilities.java | Класс служебной программы— например, утверждения маркера идентификатора фильтра. |
CHANGELOG.md | Список изменений в примере. |
CONTRIBUTING.md | Рекомендации по участию в образце. |
ЛИЦЕНЗИЯ | Лицензия для примера. |
Утверждения маркера идентификатора
Чтобы извлечь сведения о маркере, приложение использует объект Spring Security AuthenticationPrincipal
и OidcUser
объект в сопоставлении запросов, как показано в следующем примере. Полные сведения об использовании утверждений маркера идентификатора см. в примере контроллера .
import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Map<String, Object> claims = principal.getIdToken().getClaims();
}
Обработка утверждения групп в маркере идентификатора
Утверждение группы маркера включает имена групп, которым назначен пользователь, выполнившего вход, как показано в следующем примере:
{
...
"groups": [
"xyz-id-xyz",
"xyz-id-xyz",]
...
}
Распространенный способ доступа к именам групп задокументирован в разделе утверждений маркера идентификатора.
Microsoft Entra ID Boot Starter версии 3.5 и выше анализирует утверждения групп автоматически и добавляет каждую группу вошедшего пользователя Authorities
. Эта конфигурация позволяет разработчикам использовать группы с заметками условия Spring PrePost
с помощью hasAuthority
метода. Например, в SampleController.java можно найти следующие @PreAuthorize
условия:
@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
// restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
// restrict to users who belong to any of UserGroup or AdminGroup
}
Следующий код получает полный список центров для данного пользователя:
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}
Ссылки на вход и выход
Для входа приложение отправляет запрос на конечную точку входа в систему Microsoft Entra ID автоматически, настроенную клиентской библиотекой Microsoft Entra ID Spring Boot Starter для Java, как показано в следующем примере:
<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>
Для выхода приложение выполняет запрос POST к logout
конечной точке, как показано в следующем примере:
<form action="#" th:action="@{/logout}" method="post">
<input class="btn btn-warning" type="submit" value="Sign Out" />
</form>
Элементы пользовательского интерфейса, зависящие от проверки подлинности
Приложение имеет простую логику на страницах шаблона пользовательского интерфейса для определения содержимого, отображаемого на основе проверки подлинности пользователя, как показано в следующем примере с помощью тегов Spring Security Thymeleaf:
<div sec:authorize="isAuthenticated()">
this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
this content only shows to not-authenticated users
</div>
Защита маршрутов с помощью AADWebSecurityConfigurerAdapter
По умолчанию приложение защищает сведения о маркере идентификатора, только администраторы и страницы обычных пользователей , чтобы доступ к ним могли получить только пользователи, выполнившего вход. Приложение настраивает эти маршруты с помощью app.protect.authenticated
свойства из файла application.yml . Чтобы настроить конкретные требования приложения, вы можете расширить AADWebSecurityConfigurationAdapter
один из классов. Пример см. в классе SecurityConfig этого приложения, показанном в следующем коде:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
@Value( "${app.protect.authenticated}" )
private String[] protectedRoutes;
@Override
public void configure(HttpSecurity http) throws Exception {
// use required configuration form AADWebSecurityAdapter.configure:
super.configure(http);
// add custom configuration:
http.authorizeRequests()
.antMatchers(protectedRoutes).authenticated() // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
.antMatchers("/**").permitAll(); // allow all other routes.
}
}
Утверждение переполнения групп
Чтобы размер токена не превышал пределы размера заголовка HTTP, платформа удостоверений Майкрософт ограничивает количество идентификаторов объектов, которые он включает в утверждение групп.
Ограничение превышения составляет 150 для токенов SAML, 200 для токенов JWT, 6 для одностраничных приложений. Если пользователь является членом более групп, чем превышение, платформа удостоверений Майкрософт не выдает идентификаторы групп в утверждениях групп в маркере. Вместо этого он включает в себя утверждение избыточности в маркере, указывающее приложению, чтобы запросить API Microsoft Graph для получения членства в группе пользователя.
Microsoft Entra ID Boot Starter версии 3.5 и выше анализирует утверждения групп автоматически и добавляет каждую группу вошедшего пользователя Authorities
. Начальная функция автоматически обрабатывает сценарий перебора групп.
Примечание.
Мы настоятельно рекомендуем использовать функцию фильтрации групп, если это возможно, чтобы избежать перебора групп. Дополнительные сведения см. в разделе "Настройка приложения для получения значений утверждений групп из отфильтрованного набора групп, которым может быть назначен пользователь".
Создание сценария переполнения для тестирования
Вы можете использовать файл BulkCreateGroups.ps1 , предоставленный в папке AppCreationScripts , чтобы создать большое количество групп и назначить им пользователей. Этот файл помогает протестировать сценарии перебора во время разработки. Не забудьте изменить предоставленные пользователем objectId
в скрипте BulkCreateGroups.ps1 .
Для обработки избыточности требуется вызов Microsoft Graph для чтения членства в группе пользователя, поэтому приложение должно иметь разрешения User.Read и GroupMember.Read.All для выполнения функции getMemberGroups .
Внимание
Для сценария чрезмерного использования убедитесь, что вы предоставили Admin Consent
для области API GroupMember.Read.All
Microsoft Graph как для клиентских, так и для приложений-служб. Дополнительные сведения см. в шагах регистрации приложений, описанных ранее в этой статье.
Обновление регистрации приложения идентификатора Microsoft Entra (java-spring-webapp-groups)
Чтобы обновить регистрацию приложения, выполните следующие действия.
Вернитесь на портал Azure.
На панели навигации выберите Azure Active Directory, а затем выберите Регистрация приложений (предварительная версия).
На результирующем
java-spring-webapp-groups
экране выберите приложение.На странице регистрации приложения выберите "Проверка подлинности " в меню.
В разделе URI перенаправления обновите URL-адреса ответа, чтобы он соответствовал URL-адресу сайта развертывания Azure, например
https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/
.
Внимание
Если ваше приложение использует хранилище в памяти, служба приложение Azure отключает веб-сайт, если он неактивен, и все записи, которые ваше приложение хранит, очищаются. Кроме того, если увеличить количество экземпляров веб-сайта, запросы распределяются между экземплярами. Таким образом, записи приложений не одинаковы для каждого экземпляра.
Дополнительные сведения
- Документация по платформе удостоверений Майкрософт
- Общие сведения о библиотеке проверки подлинности Майкрософт (MSAL)
- Краткое описание: регистрация приложения на платформе Microsoft Identity
- Краткое руководство. Настройка клиентского приложения для доступа к веб-API
- Общие сведения о согласии приложений с идентификатором Microsoft Entra ID
- Understand user and admin consent (Получение согласия пользователя и администратора)
- Application and service principal objects in Azure Active Directory (Объекты приложения и субъекта-службы в Azure Active Directory)
- Национальные облака
- Примеры кода MSAL
Дополнительные сведения о работе протоколов OAuth 2.0 в этом сценарии и других сценариях см. в сценариях проверки подлинности для идентификатора Microsoft Entra.