Testare un'API Web ASP.NET Core protetta
si applica a: utenti della forza lavoro
utenti esterni (scopri di più)
Questa esercitazione è la parte finale di una serie che illustra la creazione e il test di un'API Web protetta registrata in un tenant di Microsoft Entra. In parte 1 di questa serieè stata creata un'API Web ASP.NET Core e ne sono stati protetti gli endpoint. A questo punto si creerà un'app daemon leggera, la si registrerà nel tenant e si userà l'app daemon per testare l'API Web compilata.
In questa esercitazione si apprenderà come:
- Registrare un'app daemon
- Assegna un ruolo applicazione alla tua app daemon
- Compilare l'app daemon
- Eseguire l'app daemon per chiamare l'API Web protetta
Prerequisiti
- Se non è già stato fatto, completare l'esercitazione : Compilare e proteggere un'API Web ASP.NET Core con Microsoft Identity Platform
Registrare l'app daemon
I passaggi seguenti illustrano come registrare l'app daemon nell'interfaccia di amministrazione di Microsoft Entra:
Accedi al centro di amministrazione di Microsoft Entra come almeno uno sviluppatore di applicazioni.
Se hai accesso a più tenant, usa l'icona Impostazioni
nel menu in alto per passare al tenant esterno dal menu Directory + sottoscrizioni.
Passare a Identità>Applicazioni>Registrazioni di app.
Selezionare + Nuova registrazione.
Nella pagina Registrare un'applicazione visualizzata immettere le informazioni di registrazione dell'applicazione:
Nella sezione Nome immettere un nome di applicazione significativo che verrà visualizzato agli utenti dell'app, ad esempio ciam-client-app.
In Tipi di account supportati, selezionare Solo gli account in questa directory organizzativa.
Selezionare Registra.
Il riquadro Panoramica dell'applicazione viene visualizzato al termine della registrazione. Registrare l'ID Directory (tenant) e l'ID Application (client) da usare nel codice sorgente dell'applicazione.
Creare un segreto client per l'applicazione registrata. L'applicazione usa il segreto client per dimostrare la propria identità quando richiede token:
- Nella pagina registrazioni dell'app selezionare l'applicazione creata ( ad esempio segreto client dell'app Web) per aprire la relativa pagina Panoramica.
- In Gestisci, selezionare Certificati & segreti>Segreti client>Nuovo segreto client.
- Nella casella Descrizione , immettere una descrizione per il segreto client, ad esempio segreto client dell'app Web.
- In Scade, seleziona una durata valida per il segreto (secondo le regole di sicurezza della tua organizzazione) e poi seleziona Aggiungi.
- Registrare il valore del segreto. Questo valore viene usato per la configurazione in un passaggio successivo. Il valore del segreto non verrà visualizzato di nuovo e non sarà recuperabile in alcun modo, dopo aver lasciato la sezione Certificati e segreti. Assicurarsi di registrarlo.
Assegnare un ruolo all'applicazione daemon
Le app che eseguono l'autenticazione da soli richiedono autorizzazioni per le app.
Nella pagina Registrazioni app selezionare l'applicazione daemon creata.
In Gestisciselezionare autorizzazioni API .
In Autorizzazioni configurateselezionare Aggiungi un'autorizzazione.
Selezionare la scheda delle API usate dalla mia organizzazione.
Nell'elenco delle API selezionare l'API Web registrata in precedenza.
Selezionare opzione Autorizzazioni applicazione. Selezioniamo questa opzione poiché l'app accede come sé stessa, ma non per conto di un utente.
Nell'elenco delle autorizzazioni, seleziona Forecast.Read (utilizza la casella di ricerca, se necessario).
Seleziona il pulsante Aggiungi autorizzazioni.
A questo punto, le autorizzazioni sono state assegnate correttamente. Tuttavia, poiché l'app daemon non consente agli utenti di interagire con essa, gli utenti stessi non possono fornire il consenso a queste autorizzazioni. Per risolvere questo problema, l'amministratore deve fornire il consenso a queste autorizzazioni per conto di tutti gli utenti nel tenant:
- Selezionare Concedi consenso amministratore per il <nome tenant>, quindi selezionare Sì.
- Selezionare Aggiorna, quindi verificare che Concesso per <il nome del tenant> venga visualizzato in Stato per le autorizzazioni.
Creare un'applicazione demone
Inizializza un'app console .NET e accedi alla sua cartella radice.
dotnet new console -o MyTestApp cd MyTestApp
Installare MSAL.NET per facilitare la gestione dell'autenticazione eseguendo il comando seguente:
dotnet add package Microsoft.Identity.Client
Eseguire il progetto API e prendere nota della porta in cui è in esecuzione.
Aprire il file Program.cs e sostituire il codice "Hello world" con il codice seguente.
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>/weatherforecast"); Console.WriteLine("Your response is: " + response.StatusCode);
Accedere alla directory radice dell'app daemon e avviare l'app usando il comando
dotnet run
. Questo codice invia una richiesta senza un token di accesso. Verrà visualizzata la stringa: La risposta è: non autorizzata stampata nella console.Rimuovere il codice nel passaggio 4 e sostituire con il codice seguente per testare l'API inviando una richiesta con un token di accesso valido. Questa app daemon usa il flusso di credenziali client per acquisire un token di accesso durante l'autenticazione senza interazione dell'utente.
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(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>/weatherforecast"); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine("Your response is: " + response.StatusCode); Console.WriteLine(content);
Navigare alla directory radice dell'app daemon ed eseguire l'app utilizzando il comando
dotnet run
. Questo codice invia una richiesta con un token di accesso valido. Dovresti vedere la stringa: La tua risposta è: OK stampati nella console insieme ad alcuni dati fittizi delle previsioni meteo dalla nostra API minima.Your response is: OK [{"date":"2025-03-01","temperatureC":45,"summary":"Warm","temperatureF":112}, {"date":"2025-03-02","temperatureC":7,"summary":"Freezing","temperatureF":44}, {"date":"2025-03-03","temperatureC":48,"summary":"Sweltering","temperatureF":118}, {"date":"2025-03-04","temperatureC":-20,"summary":"Chilly","temperatureF":-3}, {"date":"2025-03-05","temperatureC":12,"summary":"Scorching","temperatureF":53}]