Guia de início rápido: Obter um token e chamar a API do Microsoft Graph usando a identidade do aplicativo do console

Seja bem-vindo! Essa provavelmente não é a página que você esperava. Enquanto trabalhamos em uma correção, este link direcionará você para o artigo certo:

Início Rápido: Adquirir um token e chamar o Microsoft Graph em um aplicativo de console .NET

Pedimos desculpas pela inconveniência e agradecemos sua paciência enquanto trabalhamos para resolver isso.

O início rápido a seguir usa um exemplo de código para demonstrar como um aplicativo de console .NET pode obter um token de acesso para chamar a API do Microsoft Graph e exibir uma lista de usuários no diretório. Ele também demonstra como um trabalho ou um serviço do Windows pode ser executado com uma identidade de aplicativo, em vez da identidade de um usuário. O aplicativo de console de amostra neste início rápido também é um aplicativo daemon, portanto, é um aplicativo cliente confidencial.

Pré-requisitos

Um requisito mínimo do SDK 6.0 do .NET.

Baixar e configurar seu aplicativo de início rápido

Etapa 1: Configurar seu aplicativo no portal do Azure

Para que o exemplo de código deste guia de início rápido funcione, crie um segredo do cliente e adicione a permissão de aplicativo User.Read.All da API do Graph.

Já configurado Esses atributos já estão configurados no seu aplicativo.

Etapa 2: Baixar seu projeto do Visual Studio

Execute o projeto usando o Visual Studio 2022.

Dica

Para evitar erros causados por limitações de comprimento do caminho no Windows, é recomendável extrair os arquivos em um diretório próximo à raiz da unidade.

Observação

Enter_the_Supported_Account_Info_Here

A execução do aplicativo agora resulta na saída HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation. Esse erro ocorre porque qualquer permissão somente de aplicativo requer que um Administrador Global do diretório conceda a permissão ao aplicativo. Selecione uma das opções a seguir, dependendo da função.

Administrator de locatário global

Para um administrador global de locatários, acesse a página Permissões de API e selecione Conceder consentimento do administrador para Insira_o_Nome_do_Locatário_Aqui.

Usuário padrão

Para usuários padrão do seu locatário, solicite ao Administrador Global que forneça consentimento do administrador para o aplicativo. Para fazer isso, forneça a seguinte URL ao administrador:

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

O erro AADSTS50011: No reply address is registered for the application pode ser exibido depois que você conceder consentimento ao aplicativo usando a URL anterior. Esse erro ocorre porque o aplicativo e a URL não têm um URI de redirecionamento. Ela pode ser ignorada.

Etapa 4: Executar o aplicativo

No Visual Studio, pressione F5 para executar o aplicativo. Caso contrário, execute o aplicativo por meio do prompt de comando, do console ou do terminal:

cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run

Neste código:

  • {ProjectFolder} é a pasta em que você extraiu o arquivo .zip. Um exemplo é C:\Azure-Samples\active-directory-dotnetcore-daemon-v2.

Uma lista de usuários na ID do Microsoft Entra deve ser exibida como um resultado.

Este aplicativo de início rápido usa um segredo do cliente para se identificar como um cliente confidencial. O segredo do cliente é adicionado como um arquivo de texto sem formatação aos seus arquivos de projeto. Por motivos de segurança, é recomendável usar um certificado em vez de um segredo do cliente antes de considerar o aplicativo como um aplicativo de produção. Para saber mais sobre como usar um certificado, confira estas instruções.

Mais informações

Esta seção apresenta uma visão geral do código necessário para a entrada de usuários. Esta visão geral pode ser útil para entender como o código > funciona, quais são os principais argumentos e como adicionar credenciais a um aplicativo de console .NET existente.

Como o exemplo funciona

Diagrama que mostra como o aplicativo de exemplo gerado por este início rápido funciona.

Microsoft.Identity.Web.GraphServiceClient

Microsoft Identity Web (no pacote Microsoft.Identity.Web.TokenAcquisition) é a biblioteca que é utilizada para solicitar tokens para acesso a uma API protegida pela plataforma de identidade da Microsoft. Este guia de início rápido solicita tokens usando a identidade do próprio aplicativo, em vez de permissões delegadas. O fluxo de autenticação, nesse caso, é conhecido como fluxo OAuth de credenciais do cliente. Para obter mais informações sobre como usar o MSAL.NET com um fluxo de credenciais de cliente, confira este artigo. Dado que o aplicativo daemon neste início rápido chama o Microsoft Graph, você instala o pacote Microsoft.Identity.Web.GraphServiceClient, que manipula solicitações autenticadas automaticamente para o Microsoft Graph (e faz referência a si mesmo Microsoft.Identity.Web.TokenAcquisition)

Microsoft.Identity.Web.GraphServiceClient pode ser instalado executando o seguinte comando no Console do Gerenciador de Pacotes do Visual Studio:

dotnet add package Microsoft.Identity.Web.GraphServiceClient

Inicialização de aplicativo

Adicione a referência ao Microsoft.Identity.Web adicionando o seguinte código:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Graph;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

Em seguida, inicialize o aplicativo com o seguinte:

// 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();

Esse código usa a configuração definida no arquivo appsettings.json:

{
   "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]"
           }
       ]
   }
}
Elemento Descrição
ClientSecret O segredo do cliente criado para o aplicativo no portal do Azure.
ClientId A ID do aplicativo (cliente) referente ao aplicativo registrado no portal do Azure. Esse valor pode ser encontrado na página Visão geral do aplicativo no portal do Azure.
Instance (Opcional) O STS (serviço de token de segurança) poder ser um ponto de extremidade da instância para o aplicativo se autenticar. Geralmente, ele é https://login.microsoftonline.com/ para a nuvem pública.
TenantId Nome do locatário ou da ID do locatário.

Para obter mais informações, confira a documentação de referência do ConfidentialClientApplication.

Chamando o Microsoft Graph

Para solicitar um token usando a identidade do aplicativo, use o método AcquireTokenForClient:

GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
              .GetAsync(r => r.Options.WithAppOnly());

Ajuda e suporte

Se precisar de ajuda, quiser relatar um problema ou desejar saber mais sobre as opções de suporte, confira Ajuda e suporte para desenvolvedores.

Próximas etapas

Para saber mais sobre aplicativos daemon, confira a visão geral do cenário: