Delen via


Zelfstudie: Een beveiligde web-API aanroepen vanuit uw .NET-daemon-app

Van toepassing op: groene cirkel met een wit vinkje. Workforce-huurders groene cirkel met een wit vinkje. 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

  1. Open de terminal en navigeer naar de map waarin u het project wilt opslaan.

  2. 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

  1. Maak appsettings.json bestand in de hoofdmap van de app.

  2. 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.

  3. 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

  1. Open het program.cs-bestand in de code-editor en verwijder de inhoud ervan.

  2. Voeg uw pakketten toe aan het bestand.

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Identity.Abstractions;
    using Microsoft.Identity.Web;
    
  3. Maak de instanties voor het verkrijgen van tokens. Gebruik de GetDefaultInstance methode van de TokenAcquirerFactory klasse van het Microsoft.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. Met GetDefaultInstance kunnen we ook services toevoegen aan de verzameling van services.

    Voeg deze coderegel toe aan het program.cs-bestand:

    var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
    
  4. Configureer de toepassingsopties die moeten worden gelezen uit de configuratie en voeg de DownstreamApi-service toe. De DownstreamApi-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.

  5. 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

  1. 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.

  2. 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 de IDownstreamApi-interface wordt gebruikt om het eindpunt aan te roepen. De app voert zelfstandig een oproep uit. De methode retourneert een HttpResponseMessage-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.