Dela via


Anropa ett underordnat webb-API från en daemonapp

.NET-daemonappar kan anropa ett webb-API. .NET-daemonappar kan också anropa flera förgodkända webb-API:er.

Anropa ett webb-API från ett daemonprogram

Så här använder du token för att anropa ett API:

Microsoft.Identity.Web sammanfattar komplexiteten i MSAL.NET. Det ger dig API:er på högre nivå som hanterar de interna aspekterna av MSAL.NET för dig, som till exempel bearbetning av fel med villkorsstyrd åtkomst och cachelagring.

Här är Program.cs för daemonappen som anropar ett underordnat 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()}");

Här är Program.cs för en daemon-app som anropar 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}"); }

Anropa flera API:er

För daemonappar måste de webb-API:er som du anropar godkännas i förväg. Det finns inget inkrementellt medgivande med daemon-appar. (Det finns ingen användarinteraktion.) Klientadministratören måste ge medgivande i förväg för programmet och alla API-behörigheter. Om du vill anropa flera API:er hämtar du en token för varje resurs, varje gång du anropar AcquireTokenForClient. MSAL använder cacheminnet för programtoken för att undvika onödiga tjänstanrop.

Nästa steg