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 interna MSAL.NET åt dig, till exempel bearbetning av fel med villkorsstyrd åtkomst, 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

Gå vidare till nästa artikel i det här scenariot, Flytta till produktion.