Testar sua API protegida
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 externo. Na Parte 1 desta série, você criou uma API Web do ASP.NET Core e protegeu seus pontos de extremidade. Nesta etapa final, você registrará o aplicativo daemon e testará sua API.
Neste tutorial, você aprenderá a:
- Testar uma API web protegida usando um aplicativo daemon leve que chama a API web
Pré-requisitos
Tutorial: Proteger uma API Web do ASP.NET Core registrada em um locatário externo
Registrar um aplicativo daemon
As seguintes etapas mostram como registrar seu aplicativo daemon no centro de administração do Microsoft Entra:
Faça login no Centro de administração do Microsoft Entra como pelo menos um Desenvolvedor de aplicativos.
Se tiver acesso a vários locatários, use o ícone Configurações no menu superior para alternar para o seu locatário externo no menu Diretórios + assinaturas.
Navegue até Identidade>Aplicativos>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 Contas somente neste 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 confirmar sua identidade ao solicitar tokens.
- Na página Registros de aplicativo, selecione o aplicativo que você criou (como ciam-client-app) para abrir sua página Visão geral.
- Em Gerenciar, selecione Certificados e segredos.
- Selecione Novo segredo do cliente.
- Na caixa Descrição, insira uma descrição para o segredo do cliente (por exemplo, ciam app client secret).
- 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. Você usará esse valor para uma 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 função de aplicativo ao aplicativo daemon
Os aplicativos que se autenticam por conta própria exigem permissões de aplicativo.
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.
Escrever código
Inicializar um aplicativo de console do .NET e navegar até a respectiva pasta raiz
dotnet new console -o MyTestApp cd MyTestApp
Instale a MSAL para ajudar você a lidar com a 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("https://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.
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 tenantName= "<your-tenant-name>"; var authority = $"https://{tenantName}.ciamlogin.com/"; var app = ConfidentialClientApplicationBuilder .Create(clientId) .WithAuthority(authority) .WithClientSecret(clientSecret) .Build(); var result = await app.AcquireTokenForClient(scopes).ExecuteAsync(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); var response = await client.GetAsync("https://localhost:44351/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 com um token de acesso válido. Você deve ver a cadeia de caracteres Sua resposta é: OK impressa em seu console.