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

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

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

Схема: работа примера приложения, созданного при работе с этим кратким руководством.

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

Для работы с этим кратким руководством требуется пакет SDK для .NET Core 6.0.

Регистрация и скачивание приложения

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

Автоматическая настройка

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

  1. Перейдите на страницу портала Azure для регистрации приложения.
  2. Введите имя приложения и нажмите кнопку Зарегистрировать.
  3. Следуйте инструкциям, чтобы скачать и автоматически настроить новое приложение одним щелчком мыши.

Настройка вручную

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

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

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

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

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

Скачайте проект Visual Studio

Этот проект можно запустить в Visual Studio или Visual Studio для Mac и скачать из примера кода.

Совет

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

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

  1. Извлеките файл .zip в локальную папку, близкую к корню диска, чтобы избежать ошибок, вызванных ограничениями длины пути в Windows. Например, извлеките в C:\Azure-Samples.

  2. Откройте решение в Visual Studio: 1-Call-MSGraph\daemon-console.sln (необязательно).

  3. В файле appsettings.json замените значения Tenant, ClientIdи ClientSecret. Значение идентификатора приложения (клиента) и каталога (клиента) можно найти на странице обзор приложения на портал Azure.

    "Tenant": "Enter_the_Tenant_Id_Here",
    "ClientId": "Enter_the_Application_Id_Here",
    "ClientSecret": "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* error: "Insufficient privileges to complete the operation. Эта ошибка возникает из-за того, что для любого разрешения только для приложений требуется, чтобы глобальный администратор каталога дал согласие приложению. Выберите один из следующих вариантов в зависимости от роли.

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

Для глобального администратора клиента перейдите в раздел Корпоративные приложения в портал Azure. Выберите регистрацию приложения и выберите Разрешения в разделе Безопасность на левой панели. Затем нажмите большую кнопку с меткой Предоставить согласие администратора для {Имя клиента} (где {Имя клиента} — это имя каталога).

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

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

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

В URL-адресе:

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

Ошибка AADSTS50011: No reply address is registered for the application может появиться после предоставления согласия приложению с помощью предыдущего URL-адреса. Эта ошибка возникает из-за того, что приложение и URL-адрес не имеют URI перенаправления. Это сообщение можно проигнорировать.

Шаг 5. Выполнение приложения

В Visual Studio нажмите клавишу F5 , чтобы запустить приложение. Приложение можно также запустить с помощью командной строки, консоли или терминала:

cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run

В этом коде:

  • {ProjectFolder} — это папка, куда вы извлекли ZIP-файл. Например, C:\Azure-Samples\active-directory-dotnetcore-daemon-v2.

В результате должен отобразиться список пользователей в Azure Active Directory.

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

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

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

MSAL.NET

Библиотека проверки подлинности Майкрософт (MSAL в пакете Microsoft.Identity.Client) — это библиотека, которая используется для входа пользователей и запроса маркеров для доступа к интерфейсу API, защищенному платформой Microsoft Identity. В этом кратком руководстве маркеры запрашиваются с использованием собственного удостоверения приложения вместо делегированных разрешений. Поток проверки подлинности, используемый в данном случае, называется потоком OAuth для учетных данных клиента. Подробные сведения об использовании MSAL.NET с потоком учетных данных клиента см. в этой статье.

MSAL.NET можно установить, выполнив следующую команду в консоли диспетчера пакетов Visual Studio:

dotnet add package Microsoft.Identity.Client

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

Добавьте ссылку на MSAL, добавив следующий код:

using Microsoft.Identity.Client;

Затем инициализируйте MSAL следующим образом:

IConfidentialClientApplication app;
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
                                          .WithClientSecret(config.ClientSecret)
                                          .WithAuthority(new Uri(config.Authority))
                                          .Build();
Элемент Описание
config.ClientSecret Секрет клиента, созданный для приложения на портале Azure.
config.ClientId Идентификатор приложения (клиента), зарегистрированного на портале Azure. Это значение можно найти на портале Azure на странице приложения Обзор.
config.Authority (Необязательно.) Конечная точка службы токенов безопасности для проверки подлинности пользователей. Обычно https://login.microsoftonline.com/{tenant} для общедоступного облака, где {tenant} — имя или идентификатор вашего клиента.

Дополнительные сведения см. в справочной документации по ConfidentialClientApplication.

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

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

result = await app.AcquireTokenForClient(scopes)
                  .ExecuteAsync();
Элемент Описание
scopes Содержит запрошенные области. Для конфиденциальных клиентов для этого значения следует использовать формат, аналогичный {Application ID URI}/.default. Этот формат указывает, что запрошенные области статически определены в наборе объектов приложения, заданном на портале Azure. Для Microsoft Graph {Application ID URI} указывает на https://graph.microsoft.com. Для пользовательских веб-API значение {Application ID URI} определяется на портале Azure в разделе Регистрация приложения (предварительная версия)>Предоставление API.

Дополнительные сведения см. в справочной документации по AcquireTokenForClient.

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

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

Дальнейшие действия

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

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

Схема работы приложения, создаваемого в этом кратком руководстве

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

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

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

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

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

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

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

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

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

  1. Извлеките ZIP-файл в локальную папку, расположенную как можно ближе к корню диска (например, C:\Azure-Samples).

  2. Перейдите к вложенной папке 1-Call-MsGraph-WithSecret.

  3. Измените файл parameters.json, заменив значения полей authority, client_id и secret следующим фрагментом кода:

    "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.

Совет

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

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

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

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

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

Если вы являетесь обычным пользователем арендатора, попросите глобального администратора предоставить согласие администратора для вашего приложения. Чтобы сделать это, предоставьте следующий 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. Выполнение приложения

Зависимости этого образца необходимо установить один раз.

pip install -r requirements.txt

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

python confidential_client_secret_sample.py parameters.json

Вы должны увидеть на консоли фрагмент Json, представляющий список пользователей в вашем каталоге Azure AD.

Важно!

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

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

MSAL Python

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

Установите MSAL Python, выполнив следующую команду pip.

pip install msal

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

Добавив следующий код, вы можете добавить ссылку на MSAL.

import msal

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

app = msal.ConfidentialClientApplication(
    config["client_id"], authority=config["authority"],
    client_credential=config["secret"])
Где: Описание
config["secret"] Секрет клиента, созданный для приложения на портале Azure.
config["client_id"] Идентификатор приложения (клиента) , зарегистрированного на портале Azure. Это значение можно найти на странице приложения Обзор на портале Azure.
config["authority"] Конечная точка STS для проверки подлинности пользователей. Обычно https://login.microsoftonline.com/{tenant} для общедоступного облака, где {tenant} — имя или идентификатор вашего клиента.

Дополнительные сведения см. в справочной документации по ConfidentialClientApplication.

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

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

result = None
result = app.acquire_token_silent(config["scope"], account=None)

if not result:
    logging.info("No suitable token exists in cache. Let's get a new one from AAD.")
    result = app.acquire_token_for_client(scopes=config["scope"])
Где: Описание
config["scope"] Содержит запрошенные области. Для конфиденциальных клиентов следует использовать формат, аналогичный {Application ID URI}/.default, который указывает, что запрашиваемые области — это те, которые статически определены в объекте приложения, заданном на портале Azure (для Microsoft Graph {Application ID URI} указывает на https://graph.microsoft.com). Для пользовательских веб-API {Application ID URI} определяется в разделе Предоставление API в разделе Регистрация приложений на портале Azure.

Дополнительные сведения см. в справочной документации по AcquireTokenForClient.

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

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

Дальнейшие действия

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

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

В рамках этого краткого руководства используется библиотека проверки подлинности Майкрософт для Node.js (MSAL Node) с предоставлением учетных данных клиента.

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

Регистрация и скачивание примера приложения

Выполните шаги ниже, чтобы начать.

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

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

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки) , чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
  3. Найдите и выберите Azure Active Directory.
  4. В разделе Управление выберите Регистрация приложений>Создать регистрацию.
  5. Введите имя приложения, например msal-node-cli. Пользователи приложения могут видеть это имя. Вы можете изменить его позже.
  6. Выберите Зарегистрировать.
  7. В разделе Управление выберите Сертификаты и секреты.
  8. В разделе Секреты клиента выберите Новый секрет клиента, введите имя, а затем нажмите кнопку Добавить. Сохраните значение секрета в надежном месте, так как это значение потребуется вам в дальнейшем.
  9. В разделе Управление выберите Разрешения API>Добавить разрешение. Выберите Microsoft Graph.
  10. Выберите Разрешения приложений.
  11. В узле Пользователь выберите User.Read.All, а затем щелкните Добавить разрешения.

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

Скачивание примера кода

Шаг 3. Настройка примера проекта Node.js

  1. Распакуйте ZIP-файл в локальную папку, расположенную как можно ближе к корню диска (например, C:\Azure-Samples).
  2. Измените файл .env, заменив значения полей TENANT_ID, CLIENT_ID и CLIENT_SECRET следующим фрагментом кода:
"TENANT_ID": "Enter_the_Tenant_Id_Here",
 "CLIENT_ID": "Enter_the_Application_Id_Here",
 "CLIENT_SECRET": "Enter_the_Client_Secret_Here"

Где:

  • Enter_the_Application_Id_Here — это идентификатор зарегистрированного вами ранее приложения (клиента). Этот идентификатор можно найти в области Обзор регистрации приложения на портале Azure.
  • Enter_the_Tenant_Id_Here — замените это значение идентификатором арендатора или именем арендатора (например, contoso.microsoft.com). Эти значения можно найти в области Обзор регистрации приложения на портале Azure.
  • Enter_the_Client_Secret_Here — замените это значение созданным ранее секретом клиента. Чтобы создать новый ключ, выберите элемент Сертификаты и секреты в параметрах регистрации приложения на портале Azure.

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

  1. Измените файл .env, заменив конечные точки Azure AD и Microsoft Graph следующими значениями:
    • Для конечной точки Azure AD замените Enter_the_Cloud_Instance_Id_Here на https://login.microsoftonline.com.
    • Для конечной точки Microsoft Graph замените Enter_the_Graph_Endpoint_Here на https://graph.microsoft.com/.

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

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

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

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

Если вы являетесь обычным пользователем арендатора, попросите глобального администратора предоставить согласие администратора для вашего приложения. Чтобы сделать это, предоставьте следующий 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. Выполнение приложения

Найдите корневую папку примера (где располагается файл package.json) в командной строке или консоли. Перед первым запуском приложения необходимо установить зависимости, необходимые для примера приложения:

npm install

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

node . --op getUsers

В выходных данных консоли вы должны увидеть фрагмент кода JSON, представляющий список пользователей в вашем каталоге Azure AD.

Примечания о коде

Ниже рассмотрены некоторые важные аспекты примера приложения.

MSAL Node

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

Вы можете установить MSAL Node, выполнив следующую команду npm.

npm install @azure/msal-node --save

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

Добавив следующий код, вы можете добавить ссылку на MSAL.

const msal = require('@azure/msal-node');

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

const msalConfig = {
    auth: {
        clientId: "Enter_the_Application_Id_Here",
        authority: "https://login.microsoftonline.com/Enter_the_Tenant_Id_Here",
        clientSecret: "Enter_the_Client_Secret_Here",
   }
};
const cca = new msal.ConfidentialClientApplication(msalConfig);
Где: Описание
clientId Идентификатор приложения (клиента) , зарегистрированного на портале Azure. Это значение можно найти на странице приложения Обзор на портале Azure.
authority Конечная точка STS для проверки подлинности пользователей. Обычно https://login.microsoftonline.com/{tenant} для общедоступного облака, где {tenant} — имя или идентификатор вашего арендатора.
clientSecret Секрет клиента, созданный для приложения на портале Azure.

Дополнительные сведения см. в справочной документации по ConfidentialClientApplication.

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

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

const tokenRequest = {
    scopes: [ 'https://graph.microsoft.com/.default' ],
};

const tokenResponse = await cca.acquireTokenByClientCredential(tokenRequest);
Где: Описание
tokenRequest Содержит запрошенные области. Для конфиденциальных клиентов следует использовать формат, аналогичный {Application ID URI}/.default, который указывает, что запрашиваемые области — это те, которые статически определены в объекте приложения, заданном на портале Azure (для Microsoft Graph {Application ID URI} указывает на https://graph.microsoft.com). Для пользовательских веб-API {Application ID URI} определяется в разделе Предоставление API в разделе регистрации приложения на портале Azure.
tokenResponse Ответ содержит маркер доступа для запрошенных областей.

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

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

Дальнейшие шаги

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

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

Схема работы приложения, создаваемого в этом кратком руководстве

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

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

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

У вас есть два варианта запуска приложения, используемого в этом кратком руководстве: оперативно (вариант 1) и вручную (вариант 2).

Вариант 1. Регистрация и автоматическая настройка приложения, а затем скачивание примера кода

  1. Откройте страницу регистрации приложений на портале Azure и приступите к работе.
  2. Введите имя приложения и нажмите кнопку Зарегистрировать.
  3. Следуйте инструкциям, чтобы быстро скачать и автоматически настроить новое приложение.

Вариант 2. Регистрация и настройка приложения и примера кода вручную

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

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

  1. Войдите на портал Azure.
  2. Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки) , чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
  3. Найдите и выберите Azure Active Directory.
  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_ID и SECRET следующим фрагментом кода:
  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.

Совет

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

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

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

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

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

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

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

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

Дальнейшие действия

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