Краткое руководство. Получение маркера и вызов Microsoft Graph из приложения управляющей программы Java

При работе с этим кратким руководством вы скачаете и выполните пример кода, который демонстрирует получение маркера доступа с помощью удостоверения приложения из приложения Java для вызова API Microsoft Graph и отображение списка пользователей в каталоге. а также как автоматическое задание или служба Windows могут выполняться с удостоверением приложения, а не пользователя.

Diagram showing how the sample app generated by this quickstart works.

Необходимые компоненты

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

Регистрация и скачивание приложения, используемого в этом кратком руководстве

Совет

Действия, описанные в этой статье, могут немного отличаться на портале, с который вы начинаете работу.

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

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

  1. Войдите в Центр администрирования Microsoft Entra как минимум разработчик приложений.
  2. Если у вас есть доступ к нескольким клиентам, используйте значок Параметры в верхнем меню, чтобы переключиться на клиент, в котором вы хотите зарегистрировать приложение из меню каталогов и подписок.
  3. Перейдите к регистрации приложений>удостоверений>.
  4. Выберите Создать регистрацию.
  5. Введите имя приложения, например Daemon-console. Пользователи приложения могут видеть это имя. Вы можете изменить его позже.
  6. Выберите Зарегистрировать.
  7. В разделе Управление выберите Сертификаты и секреты.
  8. В разделе Секреты клиента выберите Новый секрет клиента, введите имя, а затем нажмите кнопку Добавить. Сохраните значение секрета в надежном месте, так как это значение потребуется вам в дальнейшем.
  9. В разделе Управление выберите Разрешения API>Добавить разрешение. Выберите Microsoft Graph.
  10. Выберите Разрешения приложения.
  11. В узле Пользователь выберите User.Read.All, а затем щелкните Добавить разрешения.

Шаг 2. Скачивание проекта Java

Скачивание проекта управляющей программы Java

Шаг 3. Настройка проекта Java

  1. Извлеките ZIP-файл в локальную папку, близкую к корню диска, например C:\Azure-Samples.
  2. Перейдите к вложенной папке msal-client-credential-secret .
  3. Измените src\main\resources\application.properties и замените значения полей AUTHORITYи CLIENT_IDSECRET следующим фрагментом кода:
  AUTHORITY=https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/
  CLIENT_ID=Enter_the_Application_Id_Here
  SECRET=Enter_the_Client_Secret_Here

Где:

  • Enter_the_Application_Id_Here — это идентификатор приложения (клиента), которое вы зарегистрировали.
  • Enter_the_Tenant_Id_Here — замените это значение идентификатором арендатора или именем арендатора (например, contoso.microsoft.com).
  • Enter_the_Client_Secret_Here — замените это значение на секрет клиента, созданный на шаге 1.

Совет

Чтобы найти значения идентификатора приложения (клиента), идентификатор каталога (клиента), перейдите на страницу обзора приложения. Чтобы создать ключ, перейдите на страницу Сертификаты и секреты.

Если попытаться запустить приложение на этом этапе, вы получите ошибку HTTP 403 — Forbidden (запрещено): Insufficient privileges to complete the operation. Эта ошибка возникает, так как для любого разрешения только для приложений требуется согласие Администратор: глобальный Администратор istrator каталога должен дать согласие приложению. Выберите один из следующих вариантов с учетом своей роли:

Глобальный администратор клиента

Если вы являетесь глобальным администратором клиента, перейдите на страницу "Разрешения API" в Регистрация приложений и выберите "Предоставить согласие администратора" для {Имя клиента} (где {имя клиента} — имя вашего каталога).

Обычный пользователь

Если вы являетесь стандартным пользователем вашего клиента, вам необходимо попросить глобального Администратор istrator предоставить согласие администратора для вашего приложения. Чтобы сделать это, предоставьте следующий URL-адрес администратору:

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

Где:

  • Enter_the_Tenant_Id_Here — замените это значение на идентификатор клиента или имя клиента (например, contoso.microsoft.com).
  • Enter_the_Application_Id_Here — это идентификатор приложения (клиента), которое вы зарегистрировали.

Шаг 5. Запуск приложения

Вы можете протестировать пример, запустив метод main из ClientCredentialGrant.java в любой интегрированной среде разработки.

Из оболочки или командной строки:

$ mvn clean compile assembly:single

Это приведет к созданию msal-client-credential-secret-1.0.0.jar файла в /targets каталоге. Его можно выполнить с помощью такого исполняемого файла Java:

$ java -jar msal-client-credential-secret-1.0.0.jar

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

Важно!

В этом кратком руководстве приложение использует секрет клиента для собственной идентификации в качестве конфиденциального клиента. Так как секрет клиента добавляется в качестве обычного текста в файлы проекта, из соображениям безопасности рекомендуется использовать сертификат вместо секрета клиента, прежде чем использовать приложение в качестве рабочего. Дополнительные сведения об использовании сертификата см . в этих инструкциях в одном репозитории GitHub для этого примера, но во второй папке MSAL-client-credential-certificate.

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

MSAL Java

Библиотека MSAL Java нужна для обработки входа пользователей и запросов маркеров, которые используются для доступа к API, защищенному платформой удостоверений Майкрософт. Как описано выше, в этом кратком руководстве маркеры запрашиваются с использованием собственного удостоверения приложения вместо делегированных разрешений. Поток проверки подлинности, используемый в данном случае, называется потоком учетных данных клиента OAuth. Дополнительные сведения об использовании MSAL Java с приложениями управляющей программы см. в этой статье.

Добавьте библиотеку MSAL4J в приложение с помощью Maven или Gradle для управления зависимостями, внеся следующие изменения в файл pom.xml (Maven) или build.gradle (Gradle) приложения.

В pom.xml:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.0.0</version>
</dependency>

В файле build.gradle:

compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'

Инициализация MSAL

Добавьте ссылку на MSAL для Java, добавив следующий код в начало файла, в котором будет использоваться MSAL4J:

import com.microsoft.aad.msal4j.*;

Затем выполните инициализацию MSAL с помощью следующего кода.

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
Где: Description
CLIENT_SECRET Секрет клиента, созданный для приложения.
CLIENT_ID Идентификатор приложения (клиента) для зарегистрированного приложения. Это значение можно найти на странице обзора приложения.
AUTHORITY Конечная точка STS для проверки подлинности пользователей. Обычно https://login.microsoftonline.com/{tenant} для общедоступного облака, где {tenant} — имя или идентификатор вашего арендатора.

Запрос маркеров

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

IAuthenticationResult result;
     try {
         SilentParameters silentParameters =
                 SilentParameters
                         .builder(SCOPE)
                         .build();

         // try to acquire token silently. This call will fail since the token cache does not
         // have a token for the application you are requesting an access token for
         result = cca.acquireTokenSilently(silentParameters).join();
     } catch (Exception ex) {
         if (ex.getCause() instanceof MsalException) {

             ClientCredentialParameters parameters =
                     ClientCredentialParameters
                             .builder(SCOPE)
                             .build();

             // Try to acquire a token. If successful, you should see
             // the token information printed out to console
             result = cca.acquireToken(parameters).join();
         } else {
             // Handle other exceptions accordingly
             throw ex;
         }
     }
     return result;
Где: Description
SCOPE Содержит запрошенные области. Для конфиденциальных клиентов это должно использовать формат, аналогичный {Application ID URI}/.default тому, чтобы указать, что запрашиваемые область являются статически определенными в объекте приложения (для Microsoft Graph {Application ID URI} указывает на https://graph.microsoft.com). Для пользовательских веб-API определяется в разделе "Предоставление API" {Application ID URI} в Регистрация приложений.

Справка и поддержка

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

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

Дополнительные сведения об управляющих программах см. на главной странице сценария.