Краткое руководство. Получение маркера и вызов API Microsoft Graph из консольного приложения Java с помощью удостоверения приложения
Добро пожаловать! Возможно, это не та страница, которую вы ожидали. Пока мы работаем над исправлением, воспользуйтесь этой ссылкой, чтобы перейти к нужной статье:
Приносим извинения за неудобства и благодарим за терпение! Мы работаем над устранением этой проблемы.
При работе с этим кратким руководством вы скачаете и выполните пример кода, который демонстрирует получение маркера доступа с помощью удостоверения приложения из приложения Java для вызова API Microsoft Graph и отображение списка пользователей в каталоге. а также как автоматическое задание или служба Windows могут выполняться с удостоверением приложения, а не пользователя.
Необходимые компоненты
Для запуска этого примера вам потребуются следующие компоненты:
- Пакет SDK для Java версии 8 или более поздней.
- Maven
Скачивание и настройка приложения, используемого в этом кратком руководстве
Шаг 1. Настройка приложения в портал Azure
Для работы примера кода в этом кратком руководстве необходимо создать секрет клиента и добавить разрешение приложения API Graph User.Read.All.
Приложение настроено с помощью этих атрибутов.
Шаг 2. Скачивание проекта Java
Примечание.
Enter_the_Supported_Account_Info_Here
Шаг 3. Согласие администратора
Если попытаться запустить приложение на этом этапе, вы получите ошибку 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.
Справка и поддержка
Если вам нужна помощь, если вы хотите сообщить о проблеме или узнать о доступных вариантах поддержки, воспользуйтесь статьей Возможности получения поддержки и справки для разработчиков.
Следующие шаги
Дополнительные сведения об управляющих программах см. на главной странице сценария.