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


Как вызвать подчиненный веб-API из приложения управляющей программы

Управляющие приложения .NET могут вызывать веб-API. Приложения управляющей программы .NET также могут вызывать несколько предварительно подготовленных веб-API.

Вызов веб-API из управляющего приложения

Узнайте, как использовать токен для вызова API:

Microsoft.Identity.Web абстрагирует сложность MSAL.NET. Он предоставляет api более высокого уровня, которые обрабатывают внутренние MSAL.NET для вас, такие как обработка ошибок условного доступа, кэширование.

Ниже приведены Program.cs приложения управляющей программы, вызывающего подчиненный API:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

// In the Program.cs, acquire a token for your downstream API

var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
tokenAcquirerFactory.Services.AddDownstreamApi("MyApi",
    tokenAcquirerFactory.Configuration.GetSection("MyWebApi"));
var sp = tokenAcquirerFactory.Build();

var api = sp.GetRequiredService<IDownstreamApi>();
var result = await api.GetForAppAsync<IEnumerable<TodoItem>>("MyApi");
Console.WriteLine($"result = {result?.Count()}");

Ниже приведены Program.cs приложения управляющей программы, вызывающего Microsoft Graph:

var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
tokenAcquirerFactory.Services.AddMicrosoftGraph();
var serviceProvider = tokenAcquirerFactory.Build();
try
{
    GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
    var users = await graphServiceClient.Users
        .GetAsync(r => r.Options.WithAppOnly());
    Console.WriteLine($"{users.Count} users");
    Console.ReadKey();
}
catch (Exception ex) { Console.WriteLine("We could not retrieve the user's list: " + $"{ex}"); }

Вызов нескольких API

Для приложений управляющей программы необходимо предварительно применить веб-API, которые необходимо вызвать. Для управляющих приложений не применяется добавочное согласие. (Нет никакого взаимодействия с пользователем.) Администратор арендатора должен заранее предоставить согласие на доступ для приложения и все разрешения для API. Если вы хотите вызвать несколько API, получите отдельный токен для каждого ресурса, каждый раз вызывая AcquireTokenForClient. MSAL использует кэш маркеров приложения, чтобы избежать ненужных вызовов служб.

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