Краткое руководство. Получение маркера безопасности и вызов API Microsoft Graph из консольного приложения с помощью удостоверения приложения
Добро пожаловать! Возможно, это не та страница, которую вы ожидали. Пока мы работаем над исправлением, воспользуйтесь этой ссылкой, чтобы перейти к нужной статье:
Краткое руководство. Получение маркера и вызов Microsoft Graph в консольном приложении .NET
Приносим извинения за неудобства и благодарим за терпение! Мы работаем над устранением этой проблемы.
В следующем кратком руководстве показано, как консольное приложение .NET может получить маркер доступа для вызова API Microsoft Graph и отображения списка пользователей в каталоге. В нем также показано, как задание или служба Windows могут выполняться с удостоверением приложения, а не удостоверением пользователя. Пример консольного приложения в этом кратком руководстве также является приложением управляющей программы, поэтому это конфиденциальное клиентское приложение.
Необходимые компоненты
Минимальное требование пакета SDK для .NET 6.0.
Скачивание и настройка приложения, используемого в этом кратком руководстве
Шаг 1. Настройка приложения на портале Azure
Для работы примера кода, приведенного в этом кратком руководстве, необходимо создать секрет клиента и добавить разрешение приложения API Graph User.Read.All.
Приложение настроено с помощью этих атрибутов.
Шаг 2. Загрузка проекта Visual Studio
Запустите проект с помощью Visual Studio 2022.
Совет
Чтобы избежать ошибок, вызванных ограничениями длины пути в Windows, рекомендуется извлечь архив или клонировать репозиторий в каталог рядом с корневой папкой диска.
Примечание.
Enter_the_Supported_Account_Info_Here
Шаг 3. Согласие Администратор
Запуск приложения теперь приводит к выводу HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation
. Эта ошибка возникает, поскольку для предоставления согласия приложению требуется глобальный Администратор istrator каталога. Выберите один из следующих параметров в зависимости от роли.
Глобальный администратор клиента
Для глобального администратора клиента перейдите на страницу "Разрешения API" и выберите "Предоставить согласие администратора" для Enter_the_Tenant_Name_Here.
Обычный пользователь
Для стандартного пользователя клиента попросите глобального Администратор istrator предоставить приложению согласие администратора. Для этого укажите следующий URL-адрес администратора:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
Ошибка AADSTS50011: No reply address is registered for the application
может отображаться после предоставления согласия приложению с помощью предыдущего URL-адреса. Эта ошибка возникает, так как приложение и URL-адрес не имеют URI перенаправления. Это сообщение можно проигнорировать.
Шаг 4. Запуск приложения
В Visual Studio нажмите клавишу F5 , чтобы запустить приложение. Приложение можно также запустить с помощью командной строки, консоли или терминала:
cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run
В этом коде:
{ProjectFolder}
— это папка, куда вы извлекли ZIP-файл. Например,C:\Azure-Samples\active-directory-dotnetcore-daemon-v2
.
Список пользователей в идентификаторе Microsoft Entra должен отображаться в результате.
В рамках этого краткого руководства приложение использует секрет клиента для собственной идентификации в качестве конфиденциального клиента. Секрет клиента добавляется в виде обычного текстового файла в файлы проекта. По соображениям безопасности рекомендуется использовать сертификат вместо секрета клиента перед рассмотрением приложения в качестве рабочего приложения. Дополнительные сведения о том, как использовать сертификат, можно найти в этих инструкциях.
Дополнительные сведения
В этом разделе представлен код, используемый для выполнения входа пользователей. В этом обзоре можно понять, как > работает код, какие основные аргументы и как добавить вход в существующее консольное приложение .NET.
Как работает этот пример
Microsoft.Identity.Web.GraphServiceClient
Microsoft Identity Web (в пакете Microsoft.Identity.Web.TokenAcquisition) — это библиотека, используемая для запроса маркеров доступа к API, защищенному платформа удостоверений Майкрософт. В этом кратком руководстве маркеры запрашиваются с использованием собственного удостоверения приложения вместо делегированных разрешений. Поток проверки подлинности, используемый в данном случае, называется потоком OAuth для учетных данных клиента. Подробные сведения об использовании MSAL.NET с потоком учетных данных клиента см. в этой статье. Учитывая, что приложение управляющей программы в этом кратком руководстве вызывает Microsoft Graph, устанавливается пакет Microsoft.Identity.Web.GraphServiceClient , который обрабатывает автоматически прошедшие проверку подлинности запросы к Microsoft Graph (и ссылается на себя Microsoft.Identity.Web.TokenAcquisition).
Microsoft.Identity.Web.GraphServiceClient можно установить, выполнив следующую команду в консоли диспетчер пакетов Visual Studio:
dotnet add package Microsoft.Identity.Web.GraphServiceClient
Инициализация приложения
Добавьте ссылку на Microsoft.Identity.Web, добавив следующий код:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Graph;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;
Затем инициализируйте приложение следующим образом:
// Get the Token acquirer factory instance. By default it reads an appsettings.json
// file if it exists in the same folder as the app (make sure that the
// "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
// Configure the application options to be read from the configuration
// and add the services you need (Graph, token cache)
IServiceCollection services = tokenAcquirerFactory.Services;
services.AddMicrosoftGraph();
// By default, you get an in-memory token cache.
// For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization
// Resolve the dependency injection.
var serviceProvider = tokenAcquirerFactory.Build();
Этот код использует конфигурацию, определенную в файле appsettings.json:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
"ClientId": "[Enter here the ClientId for your application]",
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "[Enter here a client secret for your application]"
}
]
}
}
Элемент | Description |
---|---|
ClientSecret |
Секрет клиента, созданный для приложения на портале Azure. |
ClientId |
Идентификатор приложения (клиента), зарегистрированного на портале Azure. Это значение можно найти на странице обзора приложения в портал Azure. |
Instance |
(Необязательно) Служба маркеров безопасности (STS) может экземпляр конечной точки приложения для проверки подлинности. Для общедоступного облака это обычно https://login.microsoftonline.com/ . |
TenantId |
Имя клиента или идентификатора клиента. |
Дополнительные сведения см. в справочной документации по ConfidentialClientApplication
.
Вызов Microsoft Graph
Чтобы запросить маркер с помощью удостоверения приложения, используйте метод AcquireTokenForClient
.
GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
.GetAsync(r => r.Options.WithAppOnly());
Справка и поддержка
Если вам нужна помощь, если вы хотите сообщить о проблеме или узнать о доступных вариантах поддержки, воспользуйтесь статьей Возможности получения поддержки и справки для разработчиков.
Следующие шаги
Дополнительные сведения об управляющих программах см. следующий обзор сценария:
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по