Självstudie: Anropa ett skyddat webb-API från din .NET-daemonapp
Gäller för: Arbetskraftshyresgäster
externa klienter (läs mer)
Den här handledningen visar hur du ringer ett skyddat webb-API från en .NET daemon-applikation. Du gör det möjligt för klientdaemonappen att hämta en åtkomsttoken med sin egen identitet och anropa sedan webb-API:et. I vårt fall anropar vi en skyddad Microsoft Graph-slutpunkt.
I den här handledningen
- Konfigurera en daemonapp så att den använder appregistreringsinformation. Se till att du ger appen behörigheten User.Read.All i Microsoft Graph API.
- Skapa en daemonapp som hämtar en token för egen räkning och anropar ett skyddat webb-API.
Förutsättningar
- .NET. I den här självstudien använder vi .NET 9.0.
- Visual Studio Code eller någon annan kodredigerare.
-
En appregistrering i din hyresgäst. Kontrollera att du har följande från din appregistreringsinformation:
- Applikations-ID (klient) för den klientwebbapp som du har registrerat.
- ID för katalog (klientorganisation) där du registrerade din webbapp.
- Värdet klienthemlighet för webbappen som du skapade.
Skapa en .NET-daemonapp
Öppna terminalen och gå till mappen där du vill att projektet ska finnas.
Initiera en .NET-konsolapp och navigera till rotmappen.
dotnet new console -n DotnetDaemon cd DotnetDaemon
Installera paket
Installera Microsoft.Identity.Web
- och Microsoft.Identity.Web.DownstreamApi
paket:
dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi
Microsoft.Identity.Web
tillhandahåller limmet mellan ASP.NET Core, mellanprogrammet för autentisering och Microsoft Authentication Library (MSAL) för .NET, vilket gör det enklare för dig att lägga till funktioner för autentisering och auktorisering i din app.
Microsoft.Identity.Web.DownstreamApi
tillhandahåller ett gränssnitt som används för att anropa ett underordnat API.
Skapa appsettings.json fil och lägg till registreringskonfigurationer
Skapa appsettings.json fil i appens rotmapp.
Lägg till appregistreringsinformation i appsettings.json-filen.
{ "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" ] } }
Ersätt följande värden med dina egna:
Värde Beskrivning Ange_applikations-ID:t_här Program-ID:t (klient) för klientdaemonappen som du registrerade. Ange_klientens_hemlighet_här Det hemliga värdet för daemonappen som du skapade. Ange_hyresgäst-ID_här Klientorganisations-ID:t för den katalog/klientorganisation där appen är registrerad. Obs!
För appar som är registrerade i en extern klientorganisation kan du använda Authority och ta bort både Instance och TenantId.
"Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/"
. Där Enter_the_Tenant_Subdomain_Here är underdomänen för klientorganisationen.Lägg till den appsettings.json filen i projektfilen. Projektfilen är en .csproj- fil i projektet. Det beror på att filen måste kopieras till utdatakatalogen.
<ItemGroup> <None Update="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>
Hämta åtkomsttoken
Öppna filen program.cs i kodredigeraren och ta bort innehållet.
Lägg till dina paket i filen.
using Microsoft.Extensions.DependencyInjection; using Microsoft.Identity.Abstractions; using Microsoft.Identity.Web;
Skapa tokeninsamlingsinstansen. Använd metoden
GetDefaultInstance
iTokenAcquirerFactory
-klassen förMicrosoft.Identity.Web
-paketet för att skapa tokenanskaffningsinstansen. Som standard läser instansen en appsettings.json fil om den finns i samma mapp som appen.GetDefaultInstance
gör det också möjligt för oss att lägga till tjänster i tjänstsamlingen.Lägg till den här kodraden i filen program.cs:
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
Konfigurera programalternativen som ska läsas från konfigurationen och lägga till
DownstreamApi
-tjänsten. TjänstenDownstreamApi
tillhandahåller ett gränssnitt som används för att anropa ett underordnat API. Vi anropar den här tjänsten DownstreamAPI- i konfigurationsobjektet. Daemon-appen läser de underordnade API-konfigurationerna från avsnittet DownstreamApi i appsettings.json. Som standardinställning får du en minnesintern tokencache.Lägg till följande kodfragment i program.cs-filen:
const string ServiceName = "DownstreamApi"; tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName, tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
Det underordnade API som du anropar är Microsoft Graph. I den här handledningen använder vi tjänsten
DownstreamApi
. Du kan också använda Microsoft Graph SDK.Skapa tokenförvärvaren. Detta består av alla tjänster som du lägger till och returnerar en tjänstleverantör. Använd den här tjänstleverantören för att få åtkomst till den API-resurs som du lägger till. I det här fallet lägger du bara till en API-resurs som en underordnad tjänst som du vill ha åtkomst till.
Lägg till följande kodfragment i program.cs-filen:
var serviceProvider = tokenAcquirerFactory.Build();
Anropa webb-API:et
Lägg till kod för att anropa ditt skyddade webb-API med hjälp av
IDownstreamApi
-gränssnittet. I den här handledningen använder vi en Microsoft Graph API-slutpunkt.Lägg till den här koden i filen 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}"); }
Koden anropar slutpunkten som du definierade i filen appsettings.json. Den
GetForAppAsync
metoden förIDownstreamApi
-gränssnittet används för att anropa slutpunkten. Appen gör ett anrop för egen räkning. Metoden returnerar ettHttpResponseMessage
objekt. Svaret läses sedan som en sträng och visas i konsolen.
Kör klientdaemonappen
Gå till rotmappen för daemonappen och kör följande kommando:
dotnet run
Om allt är okej bör du se statuskoden Svar: OK i terminalen. Om det finns användare visas användarna i terminalen, annars visas meddelandet Det finns inga användare att visa.
Om det uppstår några fel visas ett felmeddelande i terminalen.
Felsöka
Om du stöter på fel
- Bekräfta registreringsinformationen som du lade till i appsettings.json-filen.
- Bekräfta att du har lagt till filen appsettings.json i projektfilen.
- Kontrollera att appbehörigheterna är korrekt konfigurerade.