Sdílet prostřednictvím


Návod: Volání chráněného webového API z aplikace démona .NET

Platí pro: Zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro tenanty pracovních sil. Tenanti pracovních sil zelený kruh se symbolem bílé značky zaškrtnutí, který označuje následující obsah platí pro externí tenanty. Externí tenanti (další informace)

Tento návod ukazuje, jak volat příkazem chráněné webové API z démonické aplikace .NET. Povolíte démonickou aplikaci klienta, aby získala přístupový token s vlastní identitou a pak volala webové API. V našem případě voláme na chráněný koncový bod Graphu Microsoftu.

V tomto kurzu;

  • Nakonfigurujte aplikaci démona tak, aby používala podrobnosti o registraci aplikace. Ujistěte se, že aplikaci udělíte oprávnění User.Read.All v rozhraní Microsoft Graph API.
  • Vytvořte aplikaci démona, která získá token vlastním jménem a zavolá chráněné webové rozhraní API.

Požadavky

  • .NET. V tomto kurzu používáme .NET 9.0.
  • Visual Studio Code nebo jiný editor kódu.
  • registrace aplikace ve vašem tenantu. Ujistěte se, že máte následující údaje o registraci aplikace:
    • ID aplikace (klienta) klientské webové aplikace, kterou jste zaregistrovali.
    • ID adresáře (tenanta), kde jste zaregistrovali svou webovou aplikaci.
    • Hodnota tajného klíče klienta pro webovou aplikaci, kterou jste vytvořili.

Vytvoření aplikace démona .NET

  1. Otevřete terminál a přejděte do složky, ve které má projekt žít.

  2. Inicializujte konzolovou aplikaci .NET a přejděte do její kořenové složky.

    dotnet new console -n DotnetDaemon
    cd DotnetDaemon
    

Instalace balíčků

Nainstalujte balíčky Microsoft.Identity.Web a Microsoft.Identity.Web.DownstreamApi:

dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi

Microsoft.Identity.Web poskytuje připevnění mezi ASP.NET Core, middlewarem ověřování a knihovnou MSAL (Microsoft Authentication Library) pro .NET, což usnadňuje přidávání možností ověřování a autorizace do aplikace. Microsoft.Identity.Web.DownstreamApi poskytuje rozhraní používané k volání podřízeného rozhraní API.

Vytvořte soubor appsettings.json a přidejte konfiguraci registrace

  1. Vytvořte appsettings.json soubor v kořenové složce aplikace.

  2. Do souboru appsettings.json přidejte podrobnosti o registraci aplikace.

    {
        "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"
            ]
        }
    }
    

    Nahraďte následující hodnoty vlastními hodnotami:

    Hodnota Popis
    Zadejte_ID_aplikace_sem ID aplikace (klienta) aplikace démon klienta, kterou jste zaregistrovali.
    Zadejte_tajný_klíč_klienta_sem Hodnota tajného kódu aplikace démona, kterou jste vytvořili.
    Zadejte ID nájemce sem ID tenanta adresáře, ve kterém je aplikace registrována.

    Poznámka

    U aplikací zaregistrovaných v externím tenantovi můžete použít autoritu a odebrat jak instance, tak TenantId.

    "Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/". Kde Enter_the_Tenant_Subdomain_Here je subdoména tenanta.

  3. Do souboru projektu přidejte souborappsettings.json . Soubor projektu je soubor .csproj v projektu. Důvodem je to, že soubor je potřeba zkopírovat do výstupního adresáře.

    <ItemGroup>
        <None Update="appsettings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
    </ItemGroup>
    

Získání přístupového tokenu

  1. Otevřete soubor program.cs v editoru kódu a odstraňte jeho obsah.

  2. Přidejte do souboru balíčky.

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Identity.Abstractions;
    using Microsoft.Identity.Web;
    
  3. Vytvořte instanci získání tokenu. K sestavení instance získání tokenu použijte metodu GetDefaultInstance třídy TokenAcquirerFactory balíčku Microsoft.Identity.Web. Ve výchozím nastavení instance načte souborappsettings.json , pokud existuje ve stejné složce jako aplikace. GetDefaultInstance nám také umožňuje přidávat služby do kolekce služeb.

    Do souboru program.cs přidejte tento řádek kódu:

    var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
    
  4. Nakonfigurujte možnosti aplikace, které se mají číst z konfigurace, a přidejte službu DownstreamApi. Služba DownstreamApi poskytuje rozhraní sloužící k volání podřízeného rozhraní API. Tuto službu v objektu konfigurace nazýváme DownstreamAPI . Daemon aplikace čte konfigurace downstream API z části DownstreamApi v appsettings.json. Ve výchozím nastavení získáte mezipaměť tokenů v paměti.

    Do souboru program.cs přidejte následující fragment kódu:

    const string ServiceName = "DownstreamApi";
    
    tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
        tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
    

    Rozhraní API, které voláte, je Microsoft Graph. V tomto kurzu používáme službu DownstreamApi. Můžete také použít sadu Microsoft Graph SDK.

  5. Sestavte nástroj pro získávání tokenů. Vytvoří všechny přidané služby a vrátí poskytovatele služeb. Pomocí tohoto poskytovatele služeb získáte přístup k prostředku rozhraní API, který přidáte. V takovém případě přidáte jako podřízenou službu pouze jeden prostředek rozhraní API, ke kterému chcete získat přístup.

    Do souboru program.cs přidejte následující fragment kódu:

    var serviceProvider = tokenAcquirerFactory.Build();
    

Zavolejte webové API

  1. Přidejte kód pro volání chráněného webového rozhraní API pomocí rozhraní IDownstreamApi. V tomto kurzu voláme koncový bod rozhraní Microsoft Graph API.

  2. Do souboru program.cs přidejte tento kód:

    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}"); }
    

    Kód volá koncový bod, který jste definovali v souboru appsettings.json . Metoda GetForAppAsync rozhraní IDownstreamApi se používá k volání koncového bodu. Aplikace zavolá vlastním jménem. Metoda vrátí objekt HttpResponseMessage. Odpověď se pak přečte jako řetězec a zobrazí se v konzole.

Spuštění aplikace démona klienta

Přejděte do kořenové složky aplikace démon a spusťte následující příkaz:

dotnet run

Pokud je všechno v pořádku, měli byste vidět stavový kód odpovědi: OK v terminálu. Pokud existují uživatelé, jsou uživatelé uvedení v terminálu, jinak se zobrazí zpráva , že se nezobrazují žádní uživatelé.

Pokud dojde k nějakým chybám, zobrazí se v terminálu chybová zpráva.

Odstraňování problémů

V případě, že narazíte na chyby,

  • Potvrďte podrobnosti registrace, které jste přidali do souboru appsettings.json .
  • Potvrďte, že jste do souboru projektu přidali souborappsettings.json .
  • Ověřte, že máte správně nakonfigurovaná oprávnění aplikace.