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


Краткое руководство. Получение маркера безопасности и вызов 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

Запуск приложения теперь приводит к выводу 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());

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

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

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

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