Delen via


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

Van toepassing op: Groene cirkel met een wit vinkje dat aangeeft dat de volgende inhoud van toepassing is op werknemerstenants. Werknemerstenants Groene cirkel met een wit vinkje dat aangeeft dat de volgende inhoud van toepassing is op externe tenants. Externe tenants (meer informatie)

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 geheugencache voor tokens.

    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. Dit stelt alle services samen 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.