Zelfstudie: Een beveiligde web-API aanroepen vanuit uw .NET-daemon-app
Van toepassing op: Workforce-huurders
Externe huurders (meer weten)
In deze zelfstudie ziet u hoe u een beveiligde web-API aanroept vanuit een .NET-daemon-app. U schakelt de client-daemon-app in om een toegangstoken te verkrijgen met behulp van een eigen identiteit en vervolgens de web-API aan te roepen. In ons geval noemen we een beveiligd Microsoft Graph-eindpunt.
In deze tutorial:
- Configureer een daemon-app om de app-registratiegegevens te gebruiken. Zorg ervoor dat u de app de machtiging User.Read.All verleent voor Microsoft Graph API.
- Bouw een daemon-app die namens zichzelf een token verwerft en een beveiligde web-API aanroept.
Voorwaarden
- .NET. In deze zelfstudie gebruiken we .NET 9.0.
- Visual Studio Code of een andere code-editor.
-
Een app-registratie in uw tenant. Zorg ervoor dat u het volgende hebt op basis van uw app-registratiegegevens:
- De ID van de Toepassing (client) voor de clientwebapp die u hebt geregistreerd.
- De Directory-id (tenant) waar u uw web-app hebt geregistreerd.
- Het clientgeheim waarde voor de web-app die u hebt gemaakt.
Een .NET-daemon-app maken
Open de terminal en navigeer naar de map waarin u het project wilt opslaan.
Initialiseer een .NET-console-app en navigeer naar de hoofdmap.
dotnet new console -n DotnetDaemon cd DotnetDaemon
Pakketten installeren
Installeer Microsoft.Identity.Web
- en Microsoft.Identity.Web.DownstreamApi
-pakketten:
dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi
Microsoft.Identity.Web
biedt de lijm tussen ASP.NET Core, de middleware voor verificatie en de Microsoft Authentication Library (MSAL) voor .NET, zodat u eenvoudiger verificatie- en autorisatiemogelijkheden aan uw app kunt toevoegen.
Microsoft.Identity.Web.DownstreamApi
biedt een interface die wordt gebruikt om een downstream-API aan te roepen.
Een appsettings.json-bestand maken met registratieconfiguraties toevoegen
Maak appsettings.json bestand in de hoofdmap van de app.
Voeg app-registratiegegevens toe aan het appsettings.json-bestand.
{ "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" ] } }
Vervang de volgende waarden door uw eigen waarden:
Waarde Beschrijving Voer_hier_de_Applicatie_ID_in De toepassings-id (client) van de client-daemon-app die u hebt geregistreerd. Vul_hier_de_Client_Secret_in De geheime waarde van de daemon-app die u hebt gemaakt. Enter_the_Tenant_ID_Here De tenant-ID van de directory/tenant waar de app is geregistreerd. Notitie
Voor apps die zijn geregistreerd in een externe tenant, kunt u Authority gebruiken en zowel Instance als TenantIdverwijderen.
"Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/"
. Waarbij Enter_the_Tenant_Subdomain_Here het subdomein van de tenant is.Voeg het appsettings.json bestand toe aan het projectbestand. Het projectbestand is een .csproj--bestand in uw project. Dit komt doordat het bestand moet worden gekopieerd naar de uitvoermap.
<ItemGroup> <None Update="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup>
Toegangstoken verkrijgen
Open het program.cs-bestand in de code-editor en verwijder de inhoud ervan.
Voeg uw pakketten toe aan het bestand.
using Microsoft.Extensions.DependencyInjection; using Microsoft.Identity.Abstractions; using Microsoft.Identity.Web;
Maak de instanties voor het verkrijgen van tokens. Gebruik de
GetDefaultInstance
methode van deTokenAcquirerFactory
klasse van hetMicrosoft.Identity.Web
pakket om de tokenacquisitie-instantie te bouwen. Standaard leest het exemplaar een appsettings.json-bestand als het zich in dezelfde map bevindt als de app. MetGetDefaultInstance
kunnen we ook services toevoegen aan de verzameling van services.Voeg deze coderegel toe aan het program.cs-bestand:
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
Configureer de toepassingsopties die moeten worden gelezen uit de configuratie en voeg de
DownstreamApi
-service toe. DeDownstreamApi
-service biedt een interface die wordt gebruikt om een downstream-API aan te roepen. We noemen deze service DownstreamAPI- in het configuratieobject. De daemon-app leest de downstream-API-configuraties uit de sectie DownstreamApi van appsettings.json. Standaard krijgt u een tokencache in het geheugen.Voeg het volgende codefragment toe aan het program.cs-bestand:
const string ServiceName = "DownstreamApi"; tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName, tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
De downstream-API die u aanroept, is Microsoft Graph. In deze handleiding gebruiken we de
DownstreamApi
service. U kunt ook Microsoft Graph SDK gebruiken.Bouw de token-verkrijger. Hiermee worden alle services samengesteld die u toevoegt en retourneert een serviceprovider. Gebruik deze serviceprovider om toegang te krijgen tot de API-resource die u toevoegt. In dit geval voegt u slechts één API-resource toe als een downstreamservice waartoe u toegang wilt.
Voeg het volgende codefragment toe aan het program.cs-bestand:
var serviceProvider = tokenAcquirerFactory.Build();
De web-API aanroepen
Voeg code toe om uw beveiligde web-API aan te roepen met behulp van de
IDownstreamApi
-interface. In deze zelfstudie wordt een Microsoft Graph API-eindpunt aangeroepen.Voeg deze code toe aan het program.cs-bestand:
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}"); }
De code roept het eindpunt aan dat u hebt gedefinieerd in het appsettings.json-bestand. De
GetForAppAsync
methode van deIDownstreamApi
-interface wordt gebruikt om het eindpunt aan te roepen. De app voert zelfstandig een oproep uit. De methode retourneert eenHttpResponseMessage
-object. Het antwoord wordt vervolgens gelezen als een tekenreeks en weergegeven in de console.
De client-daemon-app uitvoeren
Navigeer naar de hoofdmap van de daemon-app en voer de volgende opdracht uit:
dotnet run
Als alles in orde is, ziet u antwoordstatuscode: OK in uw terminal. Als er gebruikers zijn, worden de gebruikers weergegeven in de terminal, anders ziet u het bericht Er zijn geen gebruikers omweer te geven.
Als er fouten optreden, ziet u een foutbericht in de terminal.
Problemen oplossen en diagnosticeren
Als er fouten optreden,
- Bevestig de registratiegegevens die u hebt toegevoegd aan het appsettings.json-bestand.
- Controleer of u het appsettings.json-bestand hebt toegevoegd aan het projectbestand.
- Controleer of uw app-machtigingen juist zijn geconfigureerd.