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

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

Chamando uma API da Web a partir de um aplicativo daemon

Veja como usar o token para chamar uma API:

Microsoft.Identity.Web abstrai a complexidade do MSAL.NET. Ele fornece APIs de nível mais alto que lidam com as partes internas do MSAL.NET para você, como processamento de erros de Acesso Condicional, cache.

Aqui está a 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()}");

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

Próximos passos

Passe para o próximo artigo neste cenário, Mover para a produção.