Como configurar aplicativos daemon que chamam APIs da Web

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

Bibliotecas da Microsoft que suportam aplicativos daemon

As seguintes bibliotecas da Microsoft suportam aplicações daemon:

Linguagem / framework Projeto em
GitHub
Pacote Como obter
começar
Iniciar sessão de utilizadores Aceder a APIs Web Geralmente disponível (GA) ou
Pré-visualizaçãopública 1
.NET MSAL.NET Microsoft.Identity.Client Início rápido A biblioteca não pode solicitar tokens de ID para entrada 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 entrada do usuário. A biblioteca pode solicitar tokens de acesso para APIs da Web protegidas. GA
Nó MSAL msal-nó Início rápido A biblioteca não pode solicitar tokens de ID para entrada 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 entrada 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 aplicam-se às bibliotecas na Pré-visualização Pública.

Configurar a autoridade

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

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

Mesmo se você quiser fornecer uma ferramenta multilocatário, você deve usar um ID de locatário ou nome de domínio, e nãocommon ou organizations com esse fluxo, porque o serviço não pode inferir de forma confiável qual locatário deve ser usado.

Configurar e instanciar o aplicativo

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

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 de nuvem e o ID do locatário, que juntos compõem a autoridade.
  • A ID do cliente que você obteve do registro do aplicativo.
  • Um segredo do cliente ou um certificado.

Aqui está um exemplo de definição da configuração em um arquivo appsettings.json. Este exemplo é retirado do exemplo de código de 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]"
            }
        ]
    }
}

Você fornece um certificado em vez do segredo do cliente ou credenciais de federação de identidade de carga de trabalho.

Instanciar o aplicativo MSAL

Para instanciar o aplicativo MSAL, adicione, faça referência ou importe o pacote MSAL (dependendo do idioma).

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

Referenciar o pacote

Faça referência ao pacote MSAL no 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 . O 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 using diretiva em seu código para fazer referência a Microsoft.Identity.Web.

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

Instanciar o aplicativo cliente confidencial com um segredo do cliente

Aqui está o código para instanciar o aplicativo cliente confidencial com um 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 a partir do appsettings.json:

Instanciar o aplicativo cliente confidencial com um certificado de cliente

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

O código em si é exatamente o mesmo. O certificado é descrito na configuração. Há muitas maneiras de obter o certificado. Para mais pormenores, ver https://aka.ms/ms-id-web-certificates. Veja como você faria para obter seu certificado do KeyVault. A identidade da Microsoft delega à 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 com asserções de cliente

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

Próximos passos

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