Como configurar aplicativos daemon que chamam APIs Web

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)

Saiba como configurar o código do seu aplicativo daemon que chama APIs da Web.

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 Disponível para o público geral (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
Node MSAL Node 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

1Os 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 de aplicativo em vez de permissões delegadas. 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 incluir sua ID de locatário ou um nome de domínio associado à sua organização.

Mesmo que você queira fornecer uma ferramenta de multilocatário, use um 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 pode inferir de maneira confiável qual locatário deve ser usado.

Configurar e instanciar o aplicativo

Nas MSAL (Bibliotecas de Autenticação da Microsoft), as credenciais do cliente (segredo ou certificado) são passadas como um parâmetro da construção do aplicativo 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

O arquivo de configuração define:

  • 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 segredo de cliente ou um certificado.

Aqui está um exemplo de como definir a configuração em um arquivo de configuração de exemplo appsettings.json. Este exemplo foi extraído do exemplo de código daemon de console do .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]"
            }
        ]
    }
}

Você fornece 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 é diferente, dependendo de você usar segredos do cliente ou certificados (ou, em um cenário avançado, asserções assinadas).

Adicione uma referência ao 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

Aqui está o código para instanciar a aplicação cliente confidencial com um segredo do cliente:

O exemplo a seguir cria o aplicativo cliente confidencial usando um segredo do cliente com Microsoft. Identity.Web:

   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

Aqui está o código para criar um aplicativo com um certificado:

O código de construção do aplicativo é o mesmo que o exemplo de segredo do cliente. A única diferença é que o certificado é descrito na configuração em vez de um segredo. Há várias maneiras de obter o certificado. Para obter detalhes, consulte Usar certificados com Microsoft Identity Web. O exemplo de configuração a seguir mostra como recuperar o certificado de Azure Key Vault. 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 porque DefaultAzureCredential usa suas credenciais de desenvolvedor.

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

Cenário avançado: Criar o aplicativo cliente confidencial com asserções do 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.