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.
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
Etapa 3: Consentimento do administrador
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
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: