Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: Locatários da força de trabalho
Locatários externos (saiba mais)
Este tutorial demonstra como chamar uma API Web protegida de um aplicativo daemon do .NET. Você permite que o aplicativo daemon cliente adquira um token de acesso usando sua própria identidade e, em seguida, chame a API Web. Em nosso caso, acessamos um endpoint protegido do Microsoft Graph.
Neste tutorial;
- Configure um aplicativo daemon para usar os detalhes do registro do aplicativo. Conceda ao aplicativo a permissão User.Read.All na API do Microsoft Graph.
- Crie um aplicativo daemon que adquira um token em seu próprio nome e chame uma API Web protegida.
Pré-requisitos
- .NET. Neste tutorial, usamos o .NET 9.0.
- Visual Studio Code ou qualquer outro editor de código.
- Um registro de aplicativo no seu locatário. Verifique se você tem o seguinte nos detalhes do registro do aplicativo:
- A ID do Aplicativo (cliente) do aplicativo Web cliente que você registrou.
- O ID do diretório (locatário) onde você registrou seu aplicativo Web.
- O valor do Secreto do cliente para o aplicativo Web que você criou.
Criar um aplicativo daemon do .NET
Abra o terminal e navegue até a pasta em que você deseja que seu projeto resida.
Inicialize um aplicativo de console do .NET e navegue até sua pasta raiz.
dotnet new console -n DotnetDaemon cd DotnetDaemon
Instalar pacotes
Instale os pacotes Microsoft.Identity.Web
e Microsoft.Identity.Web.DownstreamApi
:
dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi
Microsoft.Identity.Web
fornece a associação entre ASP.NET Core, o middleware de autenticação e a MSAL (Biblioteca de Autenticação da Microsoft) para .NET, facilitando a adição de recursos de autenticação e autorização ao seu aplicativo. Microsoft.Identity.Web.DownstreamApi
fornece uma interface usada para chamar uma API downstream.
Criar appsettings.json arquivo para adicionar configurações de registro
Crie o arquivo appsettings.json na pasta raiz do aplicativo.
Adicione detalhes de registro de aplicativo ao arquivo appsettings.json.
{ "AzureAd": { // "Authority": "", you can use this for customer tenants in place of Instance and TenantId values "Instance": "https://login.microsoftonline.com/", "TenantId": "Enter_the_Tenant_ID_Here", "ClientId": "Enter_the_Application_ID_Here", "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "Enter_the_Client_Secret_Here" } ] }, "DownstreamApi": { "BaseUrl": "https://graph.microsoft.com", "RelativePath": "/v1.0/users/", "RequestAppToken": true, "Scopes": [ "https://graph.microsoft.com/.default" ] } }
Substitua os seguintes valores pelos seus próprios valores:
Valor Descrição Enter_the_Application_ID_Here A ID do aplicativo (cliente) do aplicativo daemon cliente registrado. Enter_the_Client_Secret_Here O valor do segredo do aplicativo daemon criado. Enter_the_Tenant_ID_Here A ID do locatário/diretório em que o aplicativo está registrado. Observação
Para aplicativos registrados em locatário externo, você pode usar a Autoridade e remover a Instância e a TenantId.
"Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/"
. Onde Enter_the_Tenant_Subdomain_Here é o subdomínio do locatário.Adicione o arquivo appsettings.json ao arquivo de projeto. O arquivo de projeto é um arquivo .csproj em seu projeto. Isso ocorre porque o arquivo precisa ser copiado para o diretório de saída.
<ItemGroup> <None Update="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>
Adquirir o token de acesso
Abra o arquivo program.cs no editor de código e exclua seu conteúdo.
Adicione seus pacotes ao arquivo.
using Microsoft.Extensions.DependencyInjection; using Microsoft.Identity.Abstractions; using Microsoft.Identity.Web;
Crie a instância de aquisição de token. Use o método
GetDefaultInstance
da classeTokenAcquirerFactory
do pacoteMicrosoft.Identity.Web
para criar a instância de aquisição de token. Por padrão, a instância lê um arquivo appsettings.json se ele existir na mesma pasta que o aplicativo.GetDefaultInstance
também nos permite adicionar serviços à coleção de serviços.Adicione essa linha de código ao arquivo program.cs :
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
Configure as opções do aplicativo a serem lidas a partir da configuração e adicione o serviço
DownstreamApi
. ODownstreamApi
serviço fornece uma interface usada para chamar uma API downstream. Chamamos esse serviço de DownstreamAPI no objeto de configuração. O aplicativo daemon lê as configurações de API downstream da seção DownstreamApi de appsettings.json. Por padrão, você obtém um cache de token na memória.Adicione o seguinte snippet de código ao arquivo program.cs :
const string ServiceName = "DownstreamApi"; tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName, tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
A API downstream que você chama é o Microsoft Graph. Neste tutorial, usamos o
DownstreamApi
serviço. Você também pode usar o SDK do Microsoft Graph.Crie o adquirente de token. Isso compõe todos os serviços que você adiciona e retorna um provedor de serviços. Use esse provedor de serviços para obter acesso ao recurso de API que você adiciona. Nesse caso, você adiciona apenas um recurso de API como um serviço downstream ao qual deseja acessar.
Adicione o seguinte snippet de código ao arquivo program.cs :
var serviceProvider = tokenAcquirerFactory.Build();
Chamar a API Web
Adicione código para chamar sua API Web protegida usando a
IDownstreamApi
interface. Neste tutorial, chamamos um ponto de extremidade da API do Microsoft Graph.Adicione este código ao arquivo program.cs :
try { IDownstreamApi downstreamApi = serviceProvider.GetRequiredService<IDownstreamApi>(); var response = await downstreamApi.GetForAppAsync<HttpResponseMessage>("DownstreamApi"); var content = await response.Content.ReadAsStringAsync(); var statusCode = response.StatusCode; Console.WriteLine($"Response status code: {statusCode}"); if (!content.Any()) { Console.WriteLine("There are no users to display."); return; } Console.WriteLine(content); } catch (Exception ex) { Console.WriteLine("We could not retrieve the user's list: " + $"{ex}"); }
O código chama o endpoint que você especificou no arquivo appsettings.json. O método
GetForAppAsync
da interfaceIDownstreamApi
é usado para chamar o ponto de extremidade. O aplicativo faz uma chamada em seu próprio nome. O método retorna umHttpResponseMessage
objeto. Em seguida, a resposta é lida como uma cadeia de caracteres e exibida no console.
Executar o aplicativo daemon do cliente
Navegue até a pasta raiz do aplicativo daemon e execute o seguinte comando:
dotnet run
Se tudo estiver bem, você deverá ver o código de status de resposta: OK em seu terminal. Se houver usuários, os usuários serão listados no terminal, caso contrário, você verá a mensagem que não há usuários a serem exibidos.
Se ocorrerem erros, você verá uma mensagem de erro no terminal.
Solucionar problemas
Caso você encontre erros,
- Confirme os detalhes de registro adicionados ao arquivo appsettings.json .
- Confirme se você adicionou o arquivo appsettings.json ao arquivo de projeto.
- Confirme se as permissões do aplicativo estão configuradas corretamente.