Защитите приложения Java WebLogic с помощью групп и утверждений о группах

В этой статье показано, как создать веб-приложение Java WebLogic, которое выполняет вход пользователей с помощью библиотеки аутентификации Майкрософт (MSAL) для Java. Приложение также ограничивает доступ к страницам на основе членства в группе безопасности идентификатора Microsoft Entra.

На следующей схеме показана топология приложения:

Схема, показывающая топологию приложения.

Клиентское приложение использует MSAL для Java (MSAL4J) для входа пользователей в клиент Microsoft Entra ID и получения маркера идентификации от Microsoft Entra ID. Маркер ID подтверждает, что пользователь прошёл проверку подлинности в этом арендаторе. Приложение защищает маршруты в соответствии с состоянием проверки подлинности пользователя и членством в группах.

Видео по этому сценарию см. в Реализация авторизации в приложениях с помощью ролей приложения, групп безопасности, областей разрешений и ролей каталога.

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

  • JDK версии 8 или выше
  • Maven 3
  • Клиент идентификатора Microsoft Entra. Дополнительные сведения см. в статье Как получить арендатор Microsoft Entra ID.
  • Учетная запись пользователя в собственном клиенте Идентификатора Microsoft Entra.
  • Две группы безопасности, и , содержащие пользователей, которых вы хотите привлечь к тестированию.
  • WebLogic
  • Visual Studio Code
  • Инструменты Azure для Visual Studio Code

Рекомендации

  • Некоторое знакомство с Java / Jakarta Servlets.
  • Некоторые знания о терминале Linux/OSX.
  • jwt.ms для проверки ваших токенов.
  • Fiddler для мониторинга сетевой активности и устранения неполадок.
  • Подписывайтесь на блог Microsoft Entra, чтобы быть в курсе последних обновлений.

Настройка примера

В следующих разделах показано, как настроить пример приложения.

Клонирование или скачивание примера репозитория

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

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 3-java-servlet-web-app/3-Authorization-II/groups

Или перейдите в репозиторий ms-identity-msal-java-samples, затем скачайте его как файл .zip и распакуйте его на жесткий диск.

Внимание

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

Регистрация примера приложения в клиенте Идентификатора Microsoft Entra

В этом примере есть один проект. В следующих разделах показано, как зарегистрировать приложение с помощью портал Azure.

Выберите клиент Идентификатора Microsoft Entra, в котором вы хотите создать приложения

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

  1. Войдите в портал Azure.

  2. Если ваша учетная запись присутствует более чем в одном клиенте Microsoft Entra ID, выберите свой профиль в углу портала Azure, а затем выберите Сменить каталог, чтобы переключить сеанс на нужный клиент Microsoft Entra ID.

Зарегистрируйте приложение (java-servlet-webapp-groups)

Сначала зарегистрируйте новое приложение на портале Azure, следуя инструкциям из Краткого руководства: регистрация приложения с помощью платформы удостоверений Майкрософт.

Затем выполните следующие действия, чтобы завершить регистрацию:

  1. Перейдите на страницу Регистрация приложений платформы идентификации Microsoft для разработчиков.

  2. Выберите Новая регистрация.

  3. На открывшейся странице Регистрация приложения введите следующие сведения о регистрации приложения:

    • В разделе Имя введите осмысленное имя приложения, которое будет отображаться пользователям приложения, — например, .
    • В разделе Поддерживаемые типы учетных записей выберите Учетные записи только в этом каталоге организации.
    • В разделе Redirect URI выберите Веб в раскрывающемся списке и введите следующий URI перенаправления:
  4. Выберите Зарегистрировать, чтобы создать приложение.

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

  6. Выберите Сохранить, чтобы сохранить изменения.

  7. На странице регистрации приложения выберите сертификаты и секреты на панели навигации, чтобы открыть страницу, где можно создать секреты и отправить сертификаты.

  8. В разделе Секреты клиента выберите Создать секрет клиента.

  9. Введите описание — например, секрет приложения.

  10. Выберите срок истечения действия секрета или укажите пользовательский срок его существования. Секреты клиента ограничены максимальным сроком существования 24 месяцев, и Microsoft рекомендует срок действия менее 12 месяцев. Для боевых приложений предпочтительнее использовать сертификат или учетные данные федеративной идентификации вместо секрета клиента.

  11. Выберите Добавить. Отображается созданное значение.

  12. Скопируйте и сохраните созданное значение для использования в последующих шагах. Это значение требуется для файлов конфигурации кода. Это значение не отображается снова, и его нельзя получить другими средствами. Поэтому обязательно сохраните его в портале Azure, прежде чем перейдёте на любой другой экран или панель.

  13. На странице регистрации приложения выберите API permissions на панели навигации, чтобы открыть страницу добавления доступа к API, необходимым вашему приложению.

  14. Выберите Добавить разрешение.

  15. Убедитесь, что выбрана вкладка API Майкрософт.

  16. В разделе Часто используемые интерфейсы API Microsoft выберите Microsoft Graph.

  17. В разделе "Делегированные разрешения" выберите User.Read и GroupMember.Read.All из списка. При необходимости используйте поле поиска.

  18. Выберите Добавить разрешения.

  19. требуется согласие администратора, поэтому выберите Предоставить или отозвать согласие администратора для {tenant}, а затем выберите Да, когда появится запрос, хотите ли вы предоставить согласие на запрошенные разрешения для всех учетных записей в клиенте. Для выполнения этого действия необходимо быть администратором клиента Идентификатора Microsoft Entra.


Настройте приложение (java-servlet-webapp-groups) для использования вашей регистрации приложения

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

Примечание.

В следующих шагах — это то же самое, что и или .

  1. Откройте проект в интегрированной среде разработки.

  2. Откройте файл ./src/main/resources/authentication.properties.

  3. Найдите строку . Замените существующее значение идентификатором арендатора Microsoft Entra, если вы зарегистрировали приложение с параметром Accounts in this organizational directory only.

  4. Найдите строку и замените текущее значение на идентификатор приложения или приложения , скопированные с портала Azure.

  5. Найдите строку и замените существующее значение на значение, сохранённое при создании приложения в портале Azure.

Настройка групп безопасности

У вас есть следующие варианты того, как можно дополнительно настроить свои приложения для получения утверждения о группах:

  • Получить все группы, в которые входит вошедший в систему пользователь, в арендаторе Microsoft Entra ID, включая вложенные группы. Дополнительные сведения см. в разделе Настройка приложения для получения всех групп, в которые входит вошедший в систему пользователь, включая вложенные группы.

  • Получение значений утверждений групп из отфильтрованного набора групп, с которыми приложение запрограммировано для работы. Дополнительные сведения см. в разделе Настройка приложения для получения значений утверждения groups из отфильтрованного набора групп, которым может быть назначен пользователь. Этот параметр недоступен в бесплатной версии Microsoft Entra ID.

Примечание.

Чтобы получить или локальной группы вместо идентификатора группы, см. раздел Предварительные требования для использования атрибутов групп, синхронизированных из Active Directory в статье Настройка утверждений групп для приложений с помощью Microsoft Entra ID.

Настройте приложение так, чтобы оно получало все группы, в которые входит выполнивший вход пользователь, включая вложенные группы.

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

  1. На странице регистрации приложения выберите Token Configuration на панели навигации, чтобы открыть страницу, на которой можно настроить утверждения, предоставляемые в токенах, выдаваемых вашему приложению.

  2. Выберите Добавить утверждение групп, чтобы открыть экран Изменить утверждение групп.

  3. Выберите группы безопасности ИЛИ все группы (включая списки рассылки, но не группы, назначенные приложению). Выбор обоих вариантов сводит на нет действие параметра Группы безопасности.

  4. В разделе ID выберите ID группы. Этот параметр приводит к тому, что Microsoft Entra ID отправляет идентификатор объекта групп, членом которых является пользователь, в утверждении groups маркера ID, который получает ваше приложение после входа пользователя в систему.

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

Этот вариант полезен, если верны следующие условия:

  • Вашему приложению требуется информация об определённом наборе групп, в которые может входить выполняющий вход пользователь.
  • Вашему приложению не нужны сведения обо всех группах безопасности, в которые входит этот пользователь, в арендаторе.

Этот параметр помогает вашему приложению избежать проблемы переполнения.

Примечание.

Эта функция недоступна в выпуске Microsoft Entra ID Free.

Вложенные назначения групп недоступны при использовании этого параметра.

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

  1. На странице регистрации приложения выберите Token Configuration на панели навигации, чтобы открыть страницу, на которой можно настроить утверждения, предоставляемые в токенах, выдаваемых вашему приложению.

  2. Выберите Добавить утверждение групп, чтобы открыть экран Изменить утверждение групп.

  3. Выберите группы, назначенные приложению.

    Выбор других параметров , таких как группы безопасности или все группы (включая списки рассылки, но не группы, назначенные приложению), отрицает преимущества, которые ваше приложение получает от выбора использования этого параметра.

  4. В разделе ID выберите ID группы. При выборе этого параметра Microsoft Entra ID отправляет идентификатор объекта групп, в которые входит пользователь, в утверждении groups маркера ID.

  5. Если вы публикуете веб-API с помощью параметра Expose an API, то также можете выбрать параметр Group ID в разделе Access. Этот параметр приводит к тому, что Microsoft Entra ID отправляет идентификатор объекта групп, которым назначен пользователь, в утверждении groups маркера доступа.

  6. На странице регистрации приложения выберите "Обзор " на панели навигации, чтобы открыть экран обзора приложения.

  7. Выберите гиперссылку с именем приложения в управляемом приложении в локальном каталоге. Этот заголовок поля может быть обрезан, например . При выборе этой ссылки вы перейдете на страницу Обзор корпоративного приложения, связанную с субъектом-службой вашего приложения в арендаторе, где вы его создали. Вы можете вернуться на страницу регистрации приложения с помощью кнопки "Назад" браузера.

  8. Выберите пользователей и группы на панели навигации, чтобы открыть страницу, в которой можно назначить пользователей и группы приложению.

  9. Выберите Добавить пользователя.

  10. Выберите пользователя и группы на результирующем экране.

  11. Выберите группы, которые вы хотите назначить этому приложению.

  12. Выберите Выбрать, чтобы завершить выбор групп.

  13. Выберите Назначить, чтобы завершить процесс назначения для группы.

    Теперь приложение получает эти выбранные группы в утверждении "groups", если пользователь, входящий в приложение, является членом одной или нескольких из этих назначенных групп.

  14. Выберите Свойства на панели навигации, чтобы открыть страницу, на которой перечислены основные свойства вашего приложения. Установите для флага Требуется назначение пользователя? значение Да.

Внимание

Если для параметра Требуется назначение пользователей? задано значение Да, Microsoft Entra ID проверяет, что вход в ваше приложение могут выполнять только пользователи, назначенные вашему приложению в области Пользователи и группы. Вы можете назначить пользователей напрямую или назначить группы безопасности, к которым они относятся.

Настройка приложения (java-servlet-webapp-groups) для распознавания идентификаторов групп

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

Внимание

На странице Конфигурация токена, если вы выбрали любой вариант, кроме groupID, — например, DNSDomain\sAMAccountName, — на следующих шагах следует ввести имя группы — например, — вместо идентификатора объекта:

  1. Откройте файл ./src/main/resources/authentication.properties.

  2. Найдите строку и замените существующее значение на идентификатор объекта группы , который вы скопировали на портале Azure. Удалите также фигурные скобки из значения плейсхолдера.

  3. Найдите строку и замените существующее значение на идентификатор объекта группы , который вы скопировали на портале Azure. Удалите также фигурные скобки из значения плейсхолдера.

Соберите пример

Чтобы создать пример с помощью Maven, перейдите в каталог, содержащий файл pom.xml для примера, а затем выполните следующую команду:

mvn clean package

Эта команда создает WAR-файл , который можно запустить на различных серверах приложений.

Развертывание примера

В этих инструкциях предполагается, что вы установили WebLogic и настроили некоторый домен сервера.

Перед развертыванием в WebLogic выполните следующие действия, чтобы внести некоторые изменения конфигурации в сам пример, а затем выполнить сборку или перестроить пакет:

  1. В примере найдите файл application.properties или authentication.properties, в котором вы настроили идентификатор клиента, идентификатор арендатора, URL-адрес перенаправления и т. д.

  2. В этом файле замените ссылки на или на URL-адрес и порт, на которых работает WebLogic; по умолчанию это .

  3. Кроме того, необходимо внести то же изменение в регистрацию приложения Azure, указав его в портале Azure в качестве значения URI перенаправления на вкладке Аутентификация.

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

  1. Запустите сервер WebLogic с помощью DOMAIN_NAME\bin\startWebLogic.cmd.

  2. Перейдите в веб-консоль WebLogic в браузере по адресу .

  3. Перейдите в Структура доменаРазвертывания, выберите Установить, выберите Загрузить файлы, а затем найдите файл .war, который вы собрали с помощью Maven.

  4. Выберите «Установить это развертывание как приложение», затем выберите «Далее», выберите «Готово», а затем выберите «Сохранить».

  5. Большинство параметров по умолчанию должно подойти; важно лишь, чтобы имя приложения совпадало с URI перенаправления, указанным в примере конфигурации или при регистрации приложения Azure. То есть, если URI перенаправления — , то приложение следует назвать .

  6. Вернитесь к Domain StructureDeployments и запустите приложение.

  7. После запуска приложения перейдите к , и вы сможете получить доступ к приложению.

Анализ примера

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

  1. Обратите внимание, что состояние входа или выхода отображается в центре экрана.
  2. Выберите контекстно-зависимую кнопку в углу. При первом запуске приложения на этой кнопке отображается надпись Войти.
  3. На следующей странице следуйте инструкциям и войдите с учетной записью в клиенте идентификатора Microsoft Entra ID.
  4. На экране согласия обратите внимание на запрашиваемые области.
  5. Обратите внимание, что на контекстно-зависимой кнопке теперь отображается надпись Выйти, а также ваше имя пользователя.
  6. Выберите Сведения о маркере ID, чтобы просмотреть некоторые декодированные утверждения маркера ID.
  7. Выберите группы , чтобы просмотреть все сведения о членстве в группах безопасности для пользователя, вошедшего в систему.
  8. Выберите "Только администратор" или "Обычный пользователь" , чтобы получить доступ к защищенным конечным точкам групп.
    • Если вошедший в систему пользователь состоит в группе , он может открыть обе страницы.
    • Если пользователь, выполнивший вход, находится в группе , он может перейти только на страницу Обычный пользователь.
    • Если выполнивший вход в систему пользователь не входит ни в одну из этих двух групп, он не сможет получить доступ ни к одной из этих двух страниц.
  9. Используйте кнопку в углу, чтобы выйти из системы.
  10. После выхода выберите Сведения о маркере идентификации, чтобы увидеть, что приложение отображает ошибку вместо утверждений маркера идентификации, если пользователь не авторизован.

О коде

В этом примере MSAL для Java (MSAL4J) используется для входа пользователя в систему и получения токена идентификации, который может содержать утверждение `groups`. Если в ID-токен нужно включить слишком много групп, в этом примере используется Microsoft Graph SDK for Java для получения данных о членстве в группах из Microsoft Graph. В зависимости от групп, к которым принадлежит пользователь, вошедший в систему пользователь может получить доступ ни к одной, к одной или к обеим защищённым страницам: и .

Если вы хотите реплицировать поведение этого примера, необходимо добавить MSAL4J и пакет SDK Microsoft Graph в проекты с помощью Maven. Вы можете скопировать файл pom.xml и содержимое папок helpers и authservlets из папки src/main/java/com/microsoft/azuresamples/msal4j. Вам также потребуется файл authentication.properties. Эти классы и файлы содержат универсальный код, который можно использовать в широком массиве приложений. Вы также можете скопировать остальную часть примера, но другие классы и файлы создаются специально для решения задачи этого примера.

Содержимое

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

Файл или папка Описание
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Этот каталог содержит классы, определяющие серверную бизнес-логику приложения.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Этот каталог содержит классы, используемые для входа и выхода конечных точек.
*Servlet.java Все доступные конечные точки определяются в классах Java с именами, заканчивающимися Servlet.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Вспомогательные классы для аутентификации.
AuthenticationFilter.java Перенаправляет неаутентифицированные запросы к защищённым конечным точкам на страницу с кодом ошибки 401.
src/main/resources/authentication.properties Идентификатор и конфигурация программы Microsoft Entra.
src/main/webapp/ Этот каталог содержит шаблоны JSP пользовательского интерфейса
CHANGELOG.md Список изменений в примере.
CONTRIBUTING.md Рекомендации по участию в образце.
ЛИЦЕНЗИЯ Лицензия на образец.

Обработка утверждения о группах в токенах, включая обработку превышения лимита

В следующих разделах описывается, как приложение обрабатывает утверждение о группах.

Группы утверждают

Идентификатор объекта групп безопасности, членом которых является вошедший в систему пользователь, возвращается в утверждении "groups" токена, как показано в следующем примере:

{
  ...
  "groups": [
    "0bbe91cc-b69e-414d-85a6-a043d6752215",
    "48931dac-3736-45e7-83e8-015e6dfd6f7c",]
  ...
}

Утверждение переполнения групп

Чтобы размер токена не превышал ограничения на размер HTTP-заголовков, платформа идентификации Microsoft ограничивает количество идентификаторов объектов, включаемых в утверждение groups.

Ограничение превышения составляет 150 для токенов SAML, 200 для токенов JWT и 6 для приложений с одной страницей. Если пользователь состоит в большем числе групп, чем допускает предельное значение, платформа удостоверений Майкрософт не включает идентификаторы групп в утверждение groups в токене. Вместо этого в токен включается утверждение о превышении, которое указывает приложению обратиться к Microsoft API Graph для получения сведений о членстве пользователя в группах, как показано в следующем примере:

{
  ...
  "_claim_names": {
    "groups": "src1"
    },
    {
   "_claim_sources": {
    "src1": {
        "endpoint":"[Graph Url to get this user's group membership from]"
        }
    }
  ...
}

Создайте в этом примере сценарий превышения лимита для тестирования

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

  1. Вы можете использовать файл BulkCreateGroups.ps1 , предоставленный в папке AppCreationScripts , чтобы создать большое количество групп и назначить им пользователей. Этот файл помогает протестировать сценарии перебора во время разработки. Не забудьте изменить идентификатор пользователя , указанный в скрипте BulkCreateGroups.ps1.

  2. Когда вы запускаете этот пример и происходит превышение, вы увидите _claim_names на домашней странице после того, как пользователь войдет в систему.

  3. Мы настоятельно рекомендуем использовать функцию фильтрации групп, если это возможно, чтобы избежать перебора групп. Дополнительные сведения см. в разделе Настройка приложения для получения значений утверждения groups из отфильтрованного набора групп, которым может быть назначен пользователь.

  4. Если вы не можете избежать превышения лимита групп, рекомендуем выполнить следующие действия, чтобы обработать утверждения о группах в вашем токене:

    1. Проверьте претензию _claim_names, где одно из значений — группов. Это утверждение указывает на превышение.
    2. При обнаружении вызовите конечную точку, указанную в _claim_sources, чтобы получить группы пользователей.
    3. Если ничего не найдено, проверьте утверждение groups для групп пользователя.

Примечание.

Для обработки превышения лимита требуется вызов Microsoft Graph для чтения членства вошедшего в систему пользователя в группах, поэтому приложению необходимо разрешение GroupMember.Read.All, чтобы функция getMemberObjects могла успешно выполниться.

Дополнительные сведения о программировании для Microsoft Graph см. в видеоролике Общие сведения о Microsoft Graph для разработчиков.

ConfidentialClientApplication

Экземпляр создается в файле AuthHelper.java, как показано в следующем примере. Этот объект помогает сформировать URL-адрес авторизации Microsoft Entra, а также обменять токен аутентификации на токен доступа.

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                      .builder(CLIENT_ID, secret)
                      .authority(AUTHORITY)
                      .build();

Для создания экземпляра используются следующие параметры:

  • Идентификатор клиента приложения.
  • Секрет клиента, который является обязательным для конфиденциальных клиентских приложений.
  • Центр авторизации Microsoft Entra ID, который включает идентификатор вашего клиента Microsoft Entra ID.

В этом примере эти значения считываются из файла authentication.properties с помощью средства чтения свойств в файле Config.java .

Пошаговое руководство

Ниже приведены пошаговые инструкции по функциональным возможностям приложения:

  1. Первым шагом в процессе входа является отправка запроса к конечной точке для вашего арендатора Microsoft Entra ID. Экземпляр MSAL4J используется для формирования URL-адреса запроса на авторизацию. Приложение перенаправляет браузер на этот URL-адрес, где пользователь входит в систему.

    final ConfidentialClientApplication client = getConfidentialClientInstance();
    AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES))
            .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString();
    contextAdapter.redirectUser(authorizeUrl);
    

    В следующем списке описываются функции этого кода:

    • : параметры, которые необходимо задать для формирования AuthorizationRequestUrl.
    • : где Microsoft Entra перенаправляет браузер вместе с кодом авторизации после получения учетных данных пользователя. Он должен соответствовать URI перенаправления в регистрации приложения Microsoft Entra ID в портале Azure.
    • : Области действия — это разрешения, запрашиваемые приложением.
      • Как правило, трех областей действия достаточно для получения ответа с токеном идентификации.
      • Полный список областей, запрашиваемых приложением, можно найти в файле authentication.properties . Можно добавить дополнительные области действия, например .
  2. Пользователю отображается запрос на вход в систему от Microsoft Entra ID. Если попытка входа выполнена успешно, браузер пользователя перенаправляется в конечную точку перенаправления приложения. Допустимый запрос к этой конечной точке содержит код авторизации.

  3. Затем экземпляр обменивает этот код авторизации на маркер ID и маркер доступа от Microsoft Entra ID.

    // First, validate the state, then parse any error codes in response, then extract the authCode. Then:
    // build the auth code params:
    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
            .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build();
    
    // Get a client instance and leverage it to acquire the token:
    final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance();
    final IAuthenticationResult result = client.acquireToken(authParams).get();
    

    В следующем списке описываются функции этого кода:

    • : Параметры, которые необходимо задать, чтобы обменять код авторизации на ID и/или маркер доступа.
    • : код авторизации, который был получен в конечной точке перенаправления.
    • : URI перенаправления, который использовался на предыдущем шаге, необходимо снова передать.
    • : Области действия, использованные на предыдущем шаге, необходимо снова передать.
  4. Если выполнение прошло успешно, извлекаются утверждения из токена. Если проверка nonce проходит успешно, результаты помещаются в — экземпляр — и сохраняются в сессии. Затем приложение может создать экземпляр из сеанса с помощью экземпляра всякий раз, когда ему требуется доступ к нему, как показано в следующем коде:

    // parse IdToken claims from the IAuthenticationResult:
    // (the next step - validateNonce - requires parsed claims)
    context.setIdTokenClaims(result.idToken());
    
    // if nonce is invalid, stop immediately! this could be a token replay!
    // if validation fails, throws exception and cancels auth:
    validateNonce(context);
    
    // set user to authenticated:
    context.setAuthResult(result, client.tokenCache().serialize());
    
    // handle groups overage if it has occurred.
    handleGroupsOverage(contextAdapter);
    
  5. После предыдущего шага вы можете извлечь сведения о членстве в группах, вызвав с использованием экземпляра .

  6. Если пользователь состоит в слишком большом количестве групп — более 200 — вызов может вернуть пустой результат, если бы не вызов . Между тем, возвращает , сигнализируя о том, что произошло превышение лимита и что для получения полного списка групп требуется вызов Microsoft Graph. См. метод в AuthHelper.java, чтобы понять, как это приложение использует при превышении лимита.

Защита маршрутов

Ознакомьтесь с AuthenticationFilter.java , чтобы узнать, как пример приложения фильтрует доступ к маршрутам. В файле authentication.properties свойство содержит список маршрутов, разделенных запятыми, к которым могут получать доступ только аутентифицированные пользователи, как показано в следующем примере:

# for example, /token_details requires any user to be signed in and does not require special groups claim
app.protect.authenticated=/token_details

Все маршруты, перечисленные в разделённых запятыми наборах правил под , также недоступны для неаутентифицированных аутентифицированных пользователей, как показано в следующем примере. Однако эти маршруты также содержат разделенный пробелами список членства в группах. Только пользователи, принадлежащие по крайней мере одной из соответствующих групп, могут получить доступ к этим маршрутам после проверки подлинности.

# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}

# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/admin_only admin, /regular_user admin user

Области действия

Области действия указывают Microsoft Entra ID, какой уровень доступа запрашивает приложение.

На основании запрошенных областей действия Microsoft Entra ID отображает пользователю диалоговое окно согласия при входе в систему. Если пользователь соглашается с одной или несколькими областями действия и получает токен, то согласованные области действия кодируются в полученном .

Сведения об областях, запрошенных приложением, см. в authentication.properties. По умолчанию приложение устанавливает значение параметра scopes равным . Эта конкретная область API Microsoft Graph необходима, если приложению необходимо вызвать Graph для получения членства в группах пользователя.

Дополнительные сведения

  • Библиотека аутентификации Microsoft (MSAL) для Java
  • платформа идентификации Microsoft (Microsoft Entra ID для разработчиков)
  • Краткое руководство. Регистрация приложения на платформе удостоверений Майкрософт
  • Общие сведения о сценариях предоставления согласия для приложений в Microsoft Entra ID
  • Общие сведения о согласии пользователя и администратора
  • Примеры кода MSAL

Следующий шаг

Развертывание приложений Java WebLogic в WebLogic Server на виртуальных машинах Azure