Partilhar via


Como configurar aplicativos daemon que chamam APIs da Web

Aplica-se a: Círculo verde com um símbolo de marca de verificação branco. Locatários da força de trabalho Círculo branco com um símbolo X cinzento. Locatários externos (saiba mais)

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 sobre
GitHub
Pacote Como obter
começar
Iniciar sessão de utilizadores Aceder a APIs Web Geralmente disponível (GA) ou
Versão preliminar pública1
.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. Assembleia Geral
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. Assembleia Geral
Nó MSAL msal-node 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. Assembleia Geral
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. Assembleia Geral

1Os Termos de Licença Universal para Serviços Online aplicam-se às bibliotecas em 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 incluir o ID do locatário ypur ou um nome de domínio associado à sua organização.

Mesmo que se deseje fornecer uma ferramenta multi-inquilino, deve-se usar um ID de inquilino ou nome de domínio, e nãocommon ou organizations neste fluxo, porque o serviço não pode inferir de forma confiável qual inquilino deve ser usado.

Configurar e instanciar o aplicativo

Nas Bibliotecas de Autenticação da Microsoft (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 do 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 das 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 à sua aplicação. 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, quando disponível, usa a identidade gerida para aceder ao certificado do Key Vault. 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.