Краткое руководство. Получение маркера безопасности и вызов API Microsoft Graph из консольного приложения с помощью удостоверения приложения
В следующем кратком руководстве используется пример кода, демонстрирующий, как консольное приложение .NET Core может получить маркер доступа для вызова microsoft API Graph и отображения списка пользователей в каталоге. В нем также показано, как задание или служба Windows могут выполняться с удостоверением приложения, а не с удостоверением пользователя. Пример консольного приложения в этом кратком руководстве также является приложением управляющей программы, поэтому это конфиденциальное клиентское приложение.
На следующей схеме показано, как работает пример приложения.
Предварительные требования
Для работы с этим кратким руководством требуется пакет SDK для .NET Core 6.0.
Регистрация и скачивание приложения
Приложение можно создать с помощью автоматической или ручной настройки.
Автоматическая настройка
Чтобы зарегистрировать и автоматически настроить приложение, а затем скачать пример кода, выполните следующие действия.
- Перейдите на страницу портала Azure для регистрации приложения.
- Введите имя приложения и нажмите кнопку Зарегистрировать.
- Следуйте инструкциям, чтобы скачать и автоматически настроить новое приложение одним щелчком мыши.
Настройка вручную
Чтобы вручную настроить приложение и пример кода, используйте следующие процедуры.
Шаг 1. Регистрация приложения
Чтобы зарегистрировать приложение и добавить сведения о регистрации в решение вручную, выполните следующие действия.
- Войдите на портал Azure.
- Если доступ к нескольким клиентам доступен, используйте фильтр
Каталоги и подписки в верхнем меню, чтобы переключиться на клиент, в котором будет зарегистрировано приложение.
- Найдите и выберите Azure Active Directory.
- В разделе Управление выберите Регистрация приложений>Создать регистрацию.
- Введите имя приложения Например, введите Daemon-console. Пользователи приложения увидят это имя и могут быть изменены позже.
- Выберите Зарегистрировать, чтобы создать приложение.
- В разделе Управление выберите Сертификаты и секреты.
- В разделе Секреты клиента выберите Новый секрет клиента, введите имя, а затем нажмите кнопку Добавить. Сохраните значение секрета в надежном месте, так как это значение потребуется вам в дальнейшем.
- В разделе Управление выберите Разрешения API>Добавить разрешение. Выберите Microsoft Graph.
- Выберите Разрешения приложений.
- В узле Пользователь выберите User.Read.All, а затем щелкните Добавить разрешения.
Шаг 2. Скачивание проекта Visual Studio
Этот проект можно запустить в Visual Studio или Visual Studio для Mac и скачать из примера кода.
Совет
Чтобы избежать ошибок, вызванных ограничениями длины пути в Windows, рекомендуется извлечь архив или клонировать репозиторий в каталог рядом с корневой папкой диска.
Шаг 3. Настройка проекта Visual Studio
Извлеките файл .zip в локальную папку, близкую к корню диска, чтобы избежать ошибок, вызванных ограничениями длины пути в Windows. Например, извлеките в C:\Azure-Samples.
Откройте решение в Visual Studio: 1-Call-MSGraph\daemon-console.sln (необязательно).
В файле 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. Чтобы создать ключ, перейдите на страницу Сертификаты и секреты.
Шаг 4. Согласие администратора
Теперь при запуске приложения выводятся выходные данные 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. Регистрация приложения
Чтобы зарегистрировать приложение и добавить сведения о его регистрации в решение вручную, сделайте следующее:
- Войдите на портал Azure.
- Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки)
, чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
- Найдите и выберите Azure Active Directory.
- В разделе Управление выберите Регистрация приложений>Создать регистрацию.
- Введите имя приложения, например
Daemon-console
. Пользователи приложения могут видеть это имя. Вы можете изменить его позже. - Выберите Зарегистрировать.
- В разделе Управление выберите Сертификаты и секреты.
- В разделе Секреты клиента выберите Новый секрет клиента, введите имя, а затем нажмите кнопку Добавить. Сохраните значение секрета в надежном месте, так как это значение потребуется вам в дальнейшем.
- В разделе Управление выберите Разрешения API>Добавить разрешение. Выберите Microsoft Graph.
- Выберите Разрешения приложений.
- В узле Пользователь выберите User.Read.All, а затем щелкните Добавить разрешения.
Шаг 2. Скачивание проекта Python
Скачивание проекта управляющей программы Python
Шаг 3. Настройка проекта Python
Извлеките ZIP-файл в локальную папку, расположенную как можно ближе к корню диска (например, C:\Azure-Samples).
Перейдите к вложенной папке 1-Call-MsGraph-WithSecret.
Измените файл 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 перейдите на страницу приложения Обзор. Чтобы создать ключ, перейдите на страницу Сертификаты & секреты.
Шаг 4. Согласие администратора
Если попытаться запустить приложение на этом этапе, вы получите ошибку 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) с предоставлением учетных данных клиента.
Предварительные требования
- Node.js
- Visual Studio Code или любой другой редактор кода.
Регистрация и скачивание примера приложения
Выполните шаги ниже, чтобы начать.
Шаг 1. Регистрация приложения
Чтобы зарегистрировать приложение и добавить сведения о его регистрации в решение вручную, сделайте следующее:
- Войдите на портал Azure.
- Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки)
, чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
- Найдите и выберите Azure Active Directory.
- В разделе Управление выберите Регистрация приложений>Создать регистрацию.
- Введите имя приложения, например
msal-node-cli
. Пользователи приложения могут видеть это имя. Вы можете изменить его позже. - Выберите Зарегистрировать.
- В разделе Управление выберите Сертификаты и секреты.
- В разделе Секреты клиента выберите Новый секрет клиента, введите имя, а затем нажмите кнопку Добавить. Сохраните значение секрета в надежном месте, так как это значение потребуется вам в дальнейшем.
- В разделе Управление выберите Разрешения API>Добавить разрешение. Выберите Microsoft Graph.
- Выберите Разрешения приложений.
- В узле Пользователь выберите User.Read.All, а затем щелкните Добавить разрешения.
Шаг 2. Скачивание примера проекта Node.js
Шаг 3. Настройка примера проекта Node.js
- Распакуйте ZIP-файл в локальную папку, расположенную как можно ближе к корню диска (например, C:\Azure-Samples).
- Измените файл .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.
Использование секрета в формате открытого текста в исходном коде повышает риски безопасности для приложения. В этом кратком руководстве используется секрет клиента с открытым текстом, но это сделано только для упрощения примера. Мы рекомендуем использовать учетные данные сертификата, а не секреты клиента, в конфиденциальных клиентских приложениях, особенно если вы планируете развертывать такие приложения в рабочей среде.
- Измените файл .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/
.
- Для конечной точки Azure AD замените
Шаг 4. Согласие администратора
Если попытаться запустить приложение на этом этапе, вы получите ошибку 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 могут выполняться с удостоверением приложения, а не пользователя.
Предварительные требования
Для запуска этого примера вам потребуются следующие компоненты:
- Пакет SDK для Java версии 8 или более поздней.
- Maven
Регистрация и скачивание приложения, используемого в этом кратком руководстве
У вас есть два варианта запуска приложения, используемого в этом кратком руководстве: оперативно (вариант 1) и вручную (вариант 2).
Вариант 1. Регистрация и автоматическая настройка приложения, а затем скачивание примера кода
- Откройте страницу регистрации приложений на портале Azure и приступите к работе.
- Введите имя приложения и нажмите кнопку Зарегистрировать.
- Следуйте инструкциям, чтобы быстро скачать и автоматически настроить новое приложение.
Вариант 2. Регистрация и настройка приложения и примера кода вручную
Шаг 1. Регистрация приложения
Чтобы зарегистрировать приложение и добавить сведения о его регистрации в решение вручную, сделайте следующее:
- Войдите на портал Azure.
- Если у вас есть доступ к нескольким арендаторам, в верхнем меню используйте фильтр Directories + subscriptions (Каталоги и подписки)
, чтобы выбрать арендатор, в котором следует зарегистрировать приложение.
- Найдите и выберите Azure Active Directory.
- В разделе Управление выберите Регистрация приложений>Создать регистрацию.
- Введите имя приложения, например
Daemon-console
. Пользователи приложения могут видеть это имя. Вы можете изменить его позже. - Выберите Зарегистрировать.
- В разделе Управление выберите Сертификаты и секреты.
- В разделе Секреты клиента выберите Новый секрет клиента, введите имя, а затем нажмите кнопку Добавить. Сохраните значение секрета в надежном месте, так как это значение потребуется вам в дальнейшем.
- В разделе Управление выберите Разрешения API>Добавить разрешение. Выберите Microsoft Graph.
- Выберите Разрешения приложений.
- В узле Пользователь выберите User.Read.All, а затем щелкните Добавить разрешения.
Шаг 2. Скачивание проекта Java
Скачивание проекта управляющей программы Java
Шаг 3. Настройка проекта Java
- Извлеките ZIP-файл в локальную папку, расположенную как можно ближе к корню диска (например, C:\Azure-Samples).
- Перейдите к вложенной папке msal-client-credential-secret.
- Откройте в редакторе файл 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 перейдите на страницу приложения Обзор. Чтобы создать ключ, перейдите на страницу Сертификаты & секреты.
Шаг 4. Согласие администратора
Если попытаться запустить приложение на этом этапе, вы получите ошибку 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.
Справка и поддержка
Если вам нужна помощь, если вы хотите сообщить о проблеме или узнать о доступных вариантах поддержки, воспользуйтесь статьей Возможности получения поддержки и справки для разработчиков.
Дальнейшие действия
Дополнительные сведения об управляющих программах см. на главной странице сценария.