Compartilhar via


Como chamar uma API Web downstream a partir de um aplicativo daemon

Aplica-se a: Círculo verde com um símbolo de marca de seleção branca que indica que o conteúdo a seguir se aplica aos locatários da força de trabalho. Locatários da força de trabalho (saiba mais)

Os aplicativos daemon do .NET podem chamar uma API Web. Os aplicativos daemon do .NET também podem chamar várias APIs Web pré-aprovadas.

Chamando uma API Web de um aplicativo daemon

Veja como usar o token para chamar uma API:

O Microsoft.Identity.Web abstrai a complexidade do MSAL.NET. Ele fornece APIs de nível superior que lidam com as partes internas do MSAL.NET, como processamento de erros de acesso condicional e armazenamento em cache.

Veja o Program.cs do aplicativo daemon chamando uma 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()}");

Veja o Program.cs de um aplicativo daemon que chama o 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}"); }

Chamando várias APIs

Para aplicativos daemon, as APIs Web que você chama precisam ser pré-aprovadas. Não há consentimento incremental com aplicativos daemon. (Não há nenhuma interação do usuário.) O administrador do locatário precisa fornecer consentimento com antecedência para o aplicativo e todas as permissões de API. Se você quiser chamar várias APIs, adquira um token para cada recurso, sempre chamando AcquireTokenForClient. O MSAL usa o cache de token do aplicativo para evitar chamadas de serviço desnecessárias.

Próximas etapas