Como configurar aplicativos daemon que chamam APIs Web

Saiba mais sobre a configuração do código para seu aplicativo daemon que chama APIs da Web em (configuração de aplicativo).

Bibliotecas da Microsoft com suporte para aplicativos daemon

As seguintes bibliotecas da Microsoft dão suporte aos aplicativos daemon:

Idioma / estrutura Projeto em
GitHub
Pacote Introdução
iniciado
Conectar usuários Acessar APIs da Web Geralmente disponíveis (GA) ou
Visualização pública1
.NET MSAL.NET Microsoft.Identity.Client Início rápido A biblioteca não pode solicitar tokens de ID para login do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Java MSAL4J msal4j A biblioteca não pode solicitar tokens de ID para login do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Nó MSAL msal-node Início rápido A biblioteca não pode solicitar tokens de ID para login do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Python MSAL Python msal-python Início rápido A biblioteca não pode solicitar tokens de ID para login do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA

1 Os Termos de Licença Universal para Serviços Online se aplicam a bibliotecas em Visualização Pública.

Configurar a autoridade de carimbo de data/hora

Os aplicativos daemon usam permissões do aplicativo em vez das permissões do avaliador delegado. Portanto, o tipo de conta com suporte não pode ser uma conta de nenhum diretório organizacional ou qualquer conta Microsoft pessoal (por exemplo: Skype, Xbox, Outlook.com). Não há nenhum administrador locatário para conceder a concessão a um aplicativo daemon para uma conta pessoal da Microsoft. Você precisa escolher entre contas na minha organização ou contas em qualquer organização.

A autoridade especificada na configuração do aplicativo deve ser o locatário (especificando uma ID de locatário ou um nome de domínio associado à sua organização).

Mesmo que você queira fornecer uma ferramenta de multilocatário, deverá usar uma ID de locatário ou um nome de domínio, e não common ou organizations com esse fluxo, porque o serviço não poderá inferir de maneira confiável qual locatário deve ser usado.

Configurar e criar uma instância do aplicativo

Nas bibliotecas MSAL, as credenciais do cliente (segredo ou certificado) são passadas como um parâmetro da construção do aplicativo do cliente confidencial.

Importante

Mesmo que seu aplicativo seja um aplicativo de console executado como um serviço, se for um aplicativo daemon, ele precisará ser um aplicativo cliente confidencial.

Arquivo de configuração

A configuração do arquivo descreve:

  • A instância da nuvem e a ID do locatário, juntos compõem aautoridade.
  • A ID do cliente que você conseguiu do registro do aplicativo.
  • Um ou outro, um segredo do cliente ou um certificado.

Aqui está um exemplo de como definir a configuração em um arquivo appsettings.jsno. Este exemplo é obtido do código daemon do console .NET no GitHub.

{
    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
        "ClientId": "[Enter here the ClientId for your application]",
        "ClientCredentials": [
            {
                "SourceType": "ClientSecret",
                "ClientSecret": "[Enter here a client secret for your application]"
            }
        ]
    }
}

Forneça um certificado em vez do segredo do cliente ou das credenciais de federação de identidade de carga de trabalho.

Instanciar o aplicativo MSAL

Para instanciar um aplicativo MSAL, adicione, referencie ou importe o pacote MSAL (dependendo do idioma).

A construção de objeto é diferente, dependendo se você estiver usando os segredos ou certificados do cliente (ou, como um cenário avançado, declarações assinadas).

Referencie o pacote

Referencie o pacote MSAL no seu código do aplicativo.

Adicione o pacote NuGet Microsoft.Identity.Web.TokenAcquisition ao seu aplicativo. Como alternativa, se você quiser chamar o Microsoft Graph, adicione o pacote Microsoft.Identity.Web.GraphServiceClient. Seu projeto pode ser o seguinte. O arquivo appsettings.json precisa ser copiado para o diretório de saída.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <RootNamespace>daemon_console</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Identity.Web.GraphServiceClient" Version="2.12.2" />
  </ItemGroup>

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

No arquivo Program.cs, adicione uma diretiva using em seu código para fazer referência a Microsoft.Identity.Web.

using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

Instanciar o aplicativo do cliente confidencial por meio do segredo do cliente

Eis o código para instanciar o aplicativo do cliente confidencial por meio do segredo do cliente:

   class Program
    {
        static async Task Main(string[] _)
        {
            // Get the Token acquirer factory instance. By default it reads an appsettings.json
            // file if it exists in the same folder as the app (make sure that the 
            // "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
            TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();

            // Configure the application options to be read from the configuration
            // and add the services you need (Graph, token cache)
            IServiceCollection services = tokenAcquirerFactory.Services;
            services.AddMicrosoftGraph();
            // By default, you get an in-memory token cache.
            // For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization

            // Resolve the dependency injection.
            var serviceProvider = tokenAcquirerFactory.Build();

            // ...
        }
    }

A configuração é lida no appsettings.json:

Instanciar o aplicativo do cliente confidencial por meio do certificado do cliente

Eis o código para compilar um aplicativo de um certificado:

O código em si é exatamente o mesmo. O certificado está descrito na configuração. Há várias maneiras de obter o certificado. Para obter detalhes, consulte https://aka.ms/ms-id-web-certificates. Veja como você pode obter o certificado do KeyVault. A identidade da Microsoft delega ao DefaultAzureCredential da Identidade do Azure e usa a identidade gerenciada quando disponível para acessar o certificado do KeyVault. Você pode depurar seu aplicativo localmente, pois ele usa suas credenciais de desenvolvedor.

  "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://yourKeyVaultUrl.vault.azure.net",
        "KeyVaultCertificateName": "NameOfYourCertificate"
      }

Cenário avançado: Instanciar o aplicativo cliente confidencial de declarações de cliente

Além de usar um segredo ou certificado do cliente, os aplicativos cliente confidenciais também podem provar sua identidade usando declarações de cliente. Confira CredentialDescription para obter detalhes.

Próximas etapas

Vá para o próximo artigo neste cenário,Adquirir um token para o aplicativo.