Come chiamare un'API Web downstream da un'app daemon

Le app daemon .NET possono chiamare un'API Web. Le app daemon .NET possono anche chiamare diverse API Web preapprovate.

Chiamata di un'API Web da un'applicazione daemon

Ecco come usare il token per chiamare un'API:

Microsoft.Identity.Web astrae la complessità delle MSAL.NET. Offre API di livello superiore che gestiscono automaticamente gli elementi interni di MSAL.NET, ad esempio l'elaborazione di errori di accesso condizionale, la memorizzazione nella cache.

Ecco la Program.cs dell'app daemon che chiama un'API downstream:

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()}");

Ecco la Program.cs di un'app daemon che chiama 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}"); }

Chiamata di diverse API

Per le app daemon, le API Web chiamate devono essere preapprovate. Non esiste alcun consenso incrementale con le app daemon. Non esiste alcuna interazione dell'utente. L'amministratore del tenant deve fornire il consenso in anticipo per l'applicazione e tutte le autorizzazioni API. Se si vogliono chiamare diverse API, acquisire un token per ogni risorsa, ogni volta che si chiama AcquireTokenForClient. MSAL usa la cache dei token dell'applicazione per evitare chiamate di servizio non necessarie.

Passaggi successivi

Passare all'articolo successivo in questo scenario, Passare all'ambiente di produzione.