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


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

Добро пожаловать! Возможно, это не та страница, которую вы ожидали. Пока мы работаем над исправлением, воспользуйтесь этой ссылкой, чтобы перейти к нужной статье:

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

Приносим извинения за неудобства и благодарим за терпение! Мы работаем над устранением этой проблемы.

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

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

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

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

Шаг 1. Настройка приложения в портал Azure

Для работы примера кода в этом кратком руководстве необходимо создать секрет клиента и добавить разрешение приложения API Graph User.Read.All.

Уже настроено Приложение настроено с помощью этих атрибутов.

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

Примечание.

Enter_the_Supported_Account_Info_Here

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

Администратор облачных приложений

Если вы являетесь администратором облачных приложений клиента, перейдите на страницу "Разрешения API" выберите "Предоставить согласие администратора" для Enter_the_Tenant_Name_Here.

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

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

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

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

Вы можете протестировать пример, запустив метод 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 Секрет клиента, созданный для приложения на портале Azure.
CLIENT_ID Идентификатор приложения (клиента), зарегистрированного на портале Azure. Это значение можно найти на странице приложения Обзор на портале Azure.
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, который указывает, что запрашиваемые области — это те, которые статически определены в объекте приложения, заданном на портале Azure (для Microsoft Graph {Application ID URI} указывает на https://graph.microsoft.com). Для пользовательских веб-API {Application ID URI} определяется в разделе Предоставление API в разделе Регистрация приложений на портале Azure.

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

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

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

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