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 é a parte final de uma série que demonstra a criação e o teste de uma API Web protegida registrada em um locatário do Microsoft Entra. Na primeira parte desta série, você criou uma API Web ASP.NET Core e protegeu os pontos de extremidade dela. Agora você criará um aplicativo daemon leve, o registrará em seu locatário e usará o aplicativo daemon para testar a API Web que você criou.
Neste tutorial, você:
- Registrar um aplicativo daemon
- Atribuir uma função de aplicativo ao aplicativo daemon
- Construa seu aplicativo do tipo daemon
- Execute seu aplicativo daemon para chamar a API Web protegida
Pré-requisitos
- Caso ainda não tenha feito isso, conclua o Tutorial: Criar e proteger uma API Web do ASP.NET Core com a plataforma de identidade da Microsoft
Registrar um aplicativo daemon
As seguintes etapas mostram como registrar seu aplicativo daemon no centro de administração do Microsoft Entra:
Entre no centro de administração do Microsoft Entra como, no mínimo, Desenvolvedor de aplicativos.
Se você tiver acesso a vários locatários, use o ícone Configurações no
menu superior para alternar para seu locatário externo no menu Diretórios + assinaturas.
Navegue para Entra ID>registros do aplicativo.
Selecione + Novo registro.
Na página Registrar um aplicativo que aparece, insira as informações de registro do aplicativo:
Na seção Nome, insira algo fácil de lembrar para ser exibido aos usuários do aplicativo, por exemplo, ciam-client-app.
Em Tipos de contas com suporte, selecione Somente contas deste diretório organizacional.
Selecione Registrar.
O painel Visão geral do aplicativo é exibido quando o registro for concluído. Registre a ID do diretório (locatário) e a ID do aplicativo (cliente) a ser usada no código-fonte do aplicativo.
Crie um segredo do cliente para o aplicativo registrado. O aplicativo usa o segredo do cliente para provar sua identidade quando solicita tokens:
- Na página Registros de Aplicativos, selecione o aplicativo que você criou (como segredo do cliente do aplicativo da web) para abrir sua página Visão Geral.
- Em Gerenciar, selecione Certificados e segredos>Segredos do cliente>Novo segredo do cliente.
- Na caixa Descrição , insira uma descrição para o segredo do cliente (por exemplo, segredo do cliente do aplicativo Web).
- Em Expira, selecione o período pelo qual o segredo será válido (conforme as regras de segurança da sua organização) e selecione Adicionar.
- Registre o Valor do segredo. Use esse valor para configuração em uma etapa posterior. O valor secreto não será exibido novamente e não poderá ser recuperado de forma nenhuma depois que você sair dos Certificados e segredos. Certifique-se de registrá-lo.
Atribuir uma função de aplicativo ao aplicativo daemon
Aplicativos que se autenticam sozinhos sem um usuário exigem permissões de aplicativo (também conhecidas como funções). Essas permissões permitem que o próprio aplicativo acesse recursos diretamente. Por outro lado, se estivéssemos testando a API com um usuário conectado, atribuiremos permissões delegadas (escopos). As permissões delegadas permitem que o aplicativo atue em nome do usuário, limitado aos direitos de acesso do usuário. Siga estas etapas para atribuir permissões de aplicativo ao aplicativo daemon:
Na página Registros de aplicativo, selecione o aplicativo que você criou, como ciam-client-app.
Em Gerenciar, selecione Permissões de API.
Em Permissões Configuradas, selecione Adicionar uma permissão.
Selecione a guia APIs que a minha organização usa.
Na lista de APIs, selecione a API como ciam-ToDoList-api.
Selecione a opção Permissões de aplicativo. Selecionamos essa opção quando o aplicativo faz login como ele mesmo, mas não em nome de um usuário.
Na lista de permissões, selecione TodoList.Read.All, ToDoList.ReadWrite.ALL (use a caixa de pesquisa, se necessário).
Selecione o botão Adicionar permissões.
Neste ponto, você atribuiu as permissões corretamente. No entanto, como o aplicativo daemon não permite que os usuários interajam com ele, os próprios usuários não podem consentir com essas permissões. Para resolver esse problema, você, como administrador, deve consentir com essas permissões em nome de todos os usuários no locatário:
- Selecione Dar consentimento de administrador para <nome do seu locatário> e selecione Sim.
- Selecione Atualizar e verifique se Concedido para <nome do seu locatário> aparece em Status para ambas as permissões.
Criar um aplicativo daemon
Inicialize um aplicativo de console do .NET e navegue até sua pasta raiz:
dotnet new console -o MyTestApp cd MyTestApp
Instale MSAL.NET para ajudar no tratamento da autenticação executando o seguinte comando:
dotnet add package Microsoft.Identity.Client
Execute seu projeto de API e observe a porta na qual ele está em execução.
Abra o arquivo Program.cs e substitua o código "Olá, Mundo" pelo código a seguir.
using System; using System.Net.Http; using System.Net.Http.Headers; HttpClient client = new HttpClient(); var response = await client.GetAsync("http://localhost:<your-api-port>/api/todolist); Console.WriteLine("Your response is: " + response.StatusCode);
Navegue até o diretório raiz do aplicativo daemon e execute o aplicativo usando o comando
dotnet run
. Esse código envia uma solicitação sem um token de acesso. Você deve ver a cadeia de caracteres Sua resposta é: Não autorizado impressa em seu console.Remova o código na etapa 4 e substitua-o pelo mostrado a seguir para testar sua API, enviando uma solicitação com um token de acesso válido. Esse aplicativo daemon usa o fluxo de credenciais do cliente para adquirir um token de acesso à medida que se autentica sem interação do usuário.
using Microsoft.Identity.Client; using System; using System.Net.Http; using System.Net.Http.Headers; HttpClient client = new HttpClient(); var clientId = "<your-daemon-app-client-id>"; var clientSecret = "<your-daemon-app-secret>"; var scopes = new[] {"api://<your-web-api-application-id>/.default"}; var tenantId = "<your-tenant-id>"; //Use in workforce tenant configuration var tenantName = "<your-tenant-name>"; //Use in external tenant configuration var authority = $"https://login.microsoftonline.com/{tenantId}"; // Use "https://{tenantName}.ciamlogin.com" for external tenant configuration var app = ConfidentialClientApplicationBuilder .Create(clientId) .WithAuthority(authority) .WithClientSecret(clientSecret) .Build(); var result = await app.AcquireTokenForClient(new string[] { scopes }).ExecuteAsync(); Console.WriteLine($"Access Token: {result.AccessToken}"); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); var response = await client.GetAsync("http://localhost:/<your-api-port>/api/todolist"); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine("Your response is: " + response.StatusCode); Console.WriteLine(content);
Substitua os espaços reservados no código pela ID do cliente do aplicativo daemon, o segredo, a ID do aplicativo da API Web e o nome do locatário.
- Para locatários externos, use a autoridade no formulário:
"https://{tenantName}.ciamlogin.com/"
- Para locatários da força de trabalho, use a autoridade no formulário:
"https://login.microsoftonline.com/{tenantId}"
- Para locatários externos, use a autoridade no formulário:
Navegue até o diretório raiz do aplicativo daemon e execute o aplicativo usando o comando
dotnet run
. Esse código envia uma solicitação com um token de acesso válido. Você deve ver a cadeia de caracteres Sua resposta é: OK impressa em seu console.