Partilhar via


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

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

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 aplicações 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