Udostępnij za pośrednictwem


Wprowadzenie do biblioteki azure CDN dla platformy .NET

Ważne

Usługa Azure CDN Standard firmy Microsoft (klasyczna) zostanie wycofana 30 września 2027 r. Aby uniknąć zakłóceń w działaniu usługi, należy przeprowadzić migrację profilów usługi Azure CDN Standard z usługi Microsoft (klasycznej) do warstwy Azure Front Door Standard lub Premium do 30 września 2027 r. Aby uzyskać więcej informacji, zobacz Wycofanie usługi Azure CDN w warstwie Standardowa z firmy Microsoft (wersja klasyczna).

Usługa Azure CDN z Edgio została wycofana 15 stycznia 2025 r. Aby uzyskać więcej informacji, zobacz FAQ dotyczące wycofania Azure CDN firmy Edgio.

Za pomocą biblioteki Azure CDN dla platformy .NET można zautomatyzować tworzenie i zarządzanie profilami i punktami końcowymi usługi CDN. W tym poradniku opisano tworzenie prostej aplikacji konsolowej na platformie .NET, która demonstruje różne dostępne operacje. Ten samouczek nie jest przeznaczony do opisania wszystkich aspektów biblioteki Azure CDN Library for .NET szczegółowo.

Do ukończenia tego samouczka potrzebny jest program Visual Studio 2015. Program Visual Studio Community 2015 jest bezpłatnie dostępny do pobrania.

Napiwek

Ukończony projekt z tego samouczka jest dostępny do pobrania w witrynie MSDN.

Wymagania wstępne

Przed napisaniem kodu zarządzania usługą CDN należy wykonać pewne przygotowania, aby umożliwić kodzie interakcję z usługą Azure Resource Manager. Aby wykonać to przygotowanie, należy wykonać następujące czynności:

  • Tworzenie grupy zasobów zawierającej profil usługi CDN utworzony w tym samouczku
  • Konfigurowanie identyfikatora Entra firmy Microsoft w celu zapewnienia uwierzytelniania dla aplikacji
  • Zastosuj uprawnienia do grupy zasobów, aby tylko autoryzowani użytkownicy z dzierżawy Microsoft Entra mogli korzystać z profilu CDN.

Tworzenie grupy zasobów

  1. Zaloguj się do portalu Azure.

  2. Wybierz pozycję Utwórz zasób.

  3. Wyszukaj pozycję Grupa zasobów i w okienku Grupa zasobów wybierz pozycję Utwórz.

    Tworzenie nowej grupy zasobów

  4. Nadaj grupie zasobów nazwę CdnConsoleTutorial. Wybierz swoją subskrypcję i wybierz lokalizację w pobliżu. Jeśli chcesz, możesz zaznaczyć pole wyboru Przypnij do pulpitu nawigacyjnego, aby przypiąć grupę zasobów do pulpitu nawigacyjnego w portalu. Przypinanie ułatwia późniejsze znajdowanie. Po wybraniu opcji wybierz pozycję Utwórz.

    Zrzut ekranu przedstawiający okno dialogowe Grupa zasobów.

  5. Po utworzeniu grupy zasobów, jeśli nie została przypięta do Pulpitu nawigacyjnego, możesz ją znaleźć, klikając Przeglądaj, a następnie Grupy zasobów. Aby go otworzyć, wybierz grupę zasobów. Zanotuj identyfikator subskrypcji. Potrzebujemy go później.

    Zrzut ekranu przedstawiający sekcję Samouczek konsoli C D N.

Tworzenie aplikacji Microsoft Entra i stosowanie uprawnień

Istnieją dwa podejścia do uwierzytelniania aplikacji za pomocą identyfikatora Entra firmy Microsoft: pojedynczych użytkowników lub jednostki usługi. Zasada usługi jest podobna do konta serwisowego w systemie Windows. Zamiast udzielać określonych uprawnień użytkownika do interakcji z profilami CDN, uprawnienia są przyznawane jednostce usługi. Jednostki usługi są zwykle używane do zautomatyzowanych, nieinterakcyjnych procesów. Mimo że ten samouczek dotyczy tworzenia interaktywnej aplikacji konsolowej, skoncentrujemy się na podejściu z wykorzystaniem głównego konta usługi.

Tworzenie jednostki usługi składa się z kilku kroków, w tym tworzenia aplikacji firmy Microsoft Entra. Aby go utworzyć, będziemy postępować według tego samouczka.

Ważne

Pamiętaj, aby wykonać wszystkie kroki opisane w załączonym samouczku. Ważne jest, aby ukończyć je dokładnie zgodnie z opisem. Pamiętaj, aby zanotować identyfikator dzierżawy, nazwę domeny dzierżawy (często domenę .onmicrosoft.com , chyba że określono domenę niestandardową), identyfikator klienta i klucz uwierzytelniania klienta, ponieważ te informacje będą potrzebne później. Należy zachować ostrożność, aby chronić identyfikator klienta i klucz uwierzytelniania klienta, ponieważ te poświadczenia mogą być używane przez wszystkich użytkowników do wykonywania operacji jako jednostki usługi.

Po wyświetleniu kroku o nazwie Configure multi-tenant application (Konfigurowanie aplikacji wielodostępnej) wybierz pozycję Nie.

Po przejściu do kroku Przypisz aplikację do roli użyj utworzonej wcześniej grupy zasobów CdnConsoleTutorial, ale zamiast roli Czytelnik przypisz rolę Współautor profilu usługi CDN. Po przypisaniu aplikacji roli współtwórcy profilu CDN w grupie zasobów, wróć do tego samouczka.

Po utworzeniu zasady usługi i przypisaniu roli Współautor profilu CDN, sekcja Użytkownicy dla grupy zasobów powinna wyglądać podobnie jak na poniższej ilustracji.

Panel Użytkownika

Interakcyjne uwierzytelnianie użytkowników

Jeśli zamiast jednostki usługi wolisz mieć interakcyjne uwierzytelnianie poszczególnych użytkowników, proces jest podobny do tego dla jednostki usługi. W rzeczywistości należy wykonać tę samą procedurę, ale wprowadzić kilka drobnych zmian.

Ważne

Wykonaj następujące następne kroki, jeśli zdecydujesz się używać uwierzytelniania poszczególnych użytkowników zamiast jednostki usługi.

  1. Podczas tworzenia aplikacji zamiast aplikacji internetowej wybierz pozycję Aplikacja natywna.

    Aplikacja natywna

  2. Na następnej stronie zostaniesz poproszony o identyfikator URI przekierowania. Identyfikator URI nie zostanie zweryfikowany, ale pamiętaj, co wprowadzono. Potrzebujesz go później.

  3. Nie ma potrzeby tworzenia klucza uwierzytelniania klienta.

  4. Zamiast przypisywać jednostkę usługi do roli Współautor profilu cdN, przypiszemy poszczególnych użytkowników lub grup. W tym przykładzie widać, że przypisałem użytkownika demonstracyjnego CDN do roli Współautor profilu CDN.

    Dostęp poszczególnych użytkowników

Tworzenie projektu i dodawanie pakietów NuGet

Teraz, gdy utworzyliśmy grupę zasobów dla naszych profilów usługi CDN i nadaliśmy aplikacji Microsoft Entra uprawnienia do zarządzania profilami i punktami końcowymi usługi CDN w tej grupie, możemy rozpocząć tworzenie aplikacji.

Ważne

Pakiet NuGet Microsoft.IdentityModel.Clients.ActiveDirectory i biblioteka ADAL (Azure AD Authentication Library) zostały wycofane. Od 30 czerwca 2020 r. nie dodano żadnych nowych funkcji. Zdecydowanie zachęcamy do uaktualnienia. Aby uzyskać więcej informacji, zobacz przewodnik migracji.

W programie Visual Studio 2015 wybierz pozycję Plik, Nowy, Projekt... , aby otworzyć okno dialogowe nowego projektu. Rozwiń węzeł Visual C#, a następnie wybierz pozycję Windows w okienku po lewej. Wybierz pozycję Aplikacja konsolowa w środkowym okienku. Nadaj projektowi nazwę, a następnie wybierz przycisk OK.

Nowy projekt

Nasz projekt będzie używać niektórych bibliotek platformy Azure zawartych w pakietach NuGet. Dodajmy te biblioteki do projektu.

  1. Wybierz menu Narzędzia, Menedżer pakietów Nuget, a następnie Menedżer pakietów Konsola.

    Zarządzanie pakietami Nuget

  2. W konsoli Menedżer pakietów wykonaj następujące polecenie, aby zainstalować bibliotekę uwierzytelniania usługi Active Directory (ADAL):

    Install-Package Microsoft.Identity.Client

  3. Wykonaj następujące czynności, aby zainstalować bibliotekę zarządzania usługi Azure CDN:

    Install-Package Microsoft.Azure.Management.Cdn

Dyrektywy, stałe, metoda główna i metody pomocnicze

Napiszmy podstawową strukturę naszego programu.

  1. Wróć na kartę Program.cs, zastąp dyrektywy using na górze następującym poleceniem:

    using System;
    using System.Collections.Generic;
    using Microsoft.Azure.Management.Cdn;
    using Microsoft.Azure.Management.Cdn.Models;
    using Microsoft.Azure.Management.Resources;
    using Microsoft.Azure.Management.Resources.Models;
    using Microsoft.Identity.Client;
    using Microsoft.Rest;
    
  2. Musimy zdefiniować niektóre stałe używane przez nasze metody. W klasie Program, ale przed metodą Main dodaj następujące bloki kodu. Pamiętaj, aby zastąpić symbole zastępcze, w tym <nawiasy kątowe, własnymi wartościami> zgodnie z potrzebami.

    //Tenant app constants
    private const string clientID = "<YOUR CLIENT ID>";
    private const string clientSecret = "<YOUR CLIENT AUTHENTICATION KEY>"; //Only for service principals
    private const string authority = "https://login.microsoftonline.com/<YOUR TENANT ID>/<YOUR TENANT DOMAIN NAME>";
    
    //Application constants
    private const string subscriptionId = "<YOUR SUBSCRIPTION ID>";
    private const string profileName = "CdnConsoleApp";
    private const string endpointName = "<A UNIQUE NAME FOR YOUR CDN ENDPOINT>";
    private const string resourceGroupName = "CdnConsoleTutorial";
    private const string resourceLocation = "<YOUR PREFERRED AZURE LOCATION, SUCH AS Central US>";
    
  3. Ponadto na poziomie klasy zdefiniuj te dwie zmienne. Użyjemy tych zmiennych później, aby określić, czy nasz profil i punkt końcowy już istnieją.

    static bool profileAlreadyExists = false;
    static bool endpointAlreadyExists = false;
    
  4. Zastąp metodę Main w następujący sposób:

    static void Main(string[] args)
    {
        //Get a token
        AuthenticationResult authResult = GetAccessToken();
    
        // Create CDN client
        CdnManagementClient cdn = new CdnManagementClient(new TokenCredentials(authResult.AccessToken))
            { SubscriptionId = subscriptionId };
    
        ListProfilesAndEndpoints(cdn);
    
        // Create CDN Profile
        CreateCdnProfile(cdn);
    
        // Create CDN Endpoint
        CreateCdnEndpoint(cdn);
    
        Console.WriteLine();
    
        // Purge CDN Endpoint
        PromptPurgeCdnEndpoint(cdn);
    
        // Delete CDN Endpoint
        PromptDeleteCdnEndpoint(cdn);
    
        // Delete CDN Profile
        PromptDeleteCdnProfile(cdn);
    
        Console.WriteLine("Press Enter to end program.");
        Console.ReadLine();
    }
    
  5. Niektóre z naszych innych metod będą monitować użytkownika z pytaniami "Tak/Nie". Dodaj następującą metodę, aby ułatwić wykonanie tych czynności:

    private static bool PromptUser(string Question)
    {
        Console.Write(Question + " (Y/N): ");
        var response = Console.ReadKey();
        Console.WriteLine();
        if (response.Key == ConsoleKey.Y)
        {
            return true;
        }
        else if (response.Key == ConsoleKey.N)
        {
            return false;
        }
        else
        {
            // They pressed something other than Y or N.  Let's ask them again.
            return PromptUser(Question);
        }
    }
    

Teraz, gdy zostanie napisana podstawowa struktura naszego programu, należy utworzyć metody wywoływane przez metodę Main .

Uwierzytelnianie

Aby można było użyć biblioteki zarządzania Azure CDN, musimy uwierzytelnić główne konto usługi i uzyskać token uwierzytelniania. Ta metoda używa biblioteki uwierzytelniania usługi Active Directory do pobrania tokenu.

private static AuthenticationResult GetAccessToken()
{
    AuthenticationContext authContext = new AuthenticationContext(authority);
    ClientCredential credential = new ClientCredential(clientID, clientSecret);
    AuthenticationResult authResult =
        authContext.AcquireTokenAsync("https://management.core.windows.net/", credential).Result;

    return authResult;
}

Jeśli używasz uwierzytelniania poszczególnych użytkowników, GetAccessToken metoda wygląda nieco inaczej.

Ważne

Używaj tego przykładu kodu tylko wtedy, gdy zdecydujesz się na uwierzytelnianie pojedynczych użytkowników zamiast głównego użytkownika usługi.

private static AuthenticationResult GetAccessToken()
{
    AuthenticationContext authContext = new AuthenticationContext(authority);
    AuthenticationResult authResult = authContext.AcquireTokenAsync("https://management.core.windows.net/",
        clientID, new Uri("http://<redirect URI>"), new PlatformParameters(PromptBehavior.RefreshSession)).Result;

    return authResult;
}

Pamiętaj, aby zastąpić <redirect URI> identyfikatorem URI przekierowania, który wprowadziłeś podczas rejestrowania aplikacji w Microsoft Entra ID.

Wyświetlanie listy profilów i punktów końcowych usługi CDN

Teraz możemy przystąpić do wykonywania operacji CDN. Pierwszą rzeczą, jaką robi nasza metoda, jest wymienienie wszystkich profili i punktów końcowych w naszej grupie zasobów, a jeśli znajdzie dopasowanie dla nazw profili i punktów końcowych określonych w naszych stałych, zapisuje to na później, abyśmy nie próbowali tworzyć duplikatów.

private static void ListProfilesAndEndpoints(CdnManagementClient cdn)
{
    // List all the CDN profiles in this resource group
    var profileList = cdn.Profiles.ListByResourceGroup(resourceGroupName);
    foreach (Profile p in profileList)
    {
        Console.WriteLine("CDN profile {0}", p.Name);
        if (p.Name.Equals(profileName, StringComparison.OrdinalIgnoreCase))
        {
            // Hey, that's the name of the CDN profile we want to create!
            profileAlreadyExists = true;
        }

        //List all the CDN endpoints on this CDN profile
        Console.WriteLine("Endpoints:");
        var endpointList = cdn.Endpoints.ListByProfile(p.Name, resourceGroupName);
        foreach (Endpoint e in endpointList)
        {
            Console.WriteLine("-{0} ({1})", e.Name, e.HostName);
            if (e.Name.Equals(endpointName, StringComparison.OrdinalIgnoreCase))
            {
                // The unique endpoint name already exists.
                endpointAlreadyExists = true;
            }
        }
        Console.WriteLine();
    }
}

Tworzenie profilów i punktów końcowych usługi CDN

Następnie utworzymy profil.

private static void CreateCdnProfile(CdnManagementClient cdn)
{
    if (profileAlreadyExists)
    {
        Console.WriteLine("Profile {0} already exists.", profileName);
    }
    else
    {
        Console.WriteLine("Creating profile {0}.", profileName);
        ProfileCreateParameters profileParms =
            new ProfileCreateParameters() { Location = resourceLocation, Sku = new Sku(SkuName.StandardVerizon) };
        cdn.Profiles.Create(profileName, profileParms, resourceGroupName);
    }
}

Po utworzeniu profilu tworzymy punkt końcowy.

private static void CreateCdnEndpoint(CdnManagementClient cdn)
{
    if (endpointAlreadyExists)
    {
        Console.WriteLine("Profile {0} already exists.", profileName);
    }
    else
    {
        Console.WriteLine("Creating endpoint {0} on profile {1}.", endpointName, profileName);
        EndpointCreateParameters endpointParms =
            new EndpointCreateParameters()
            {
                Origins = new List<DeepCreatedOrigin>() { new DeepCreatedOrigin("Contoso", "www.contoso.com") },
                IsHttpAllowed = true,
                IsHttpsAllowed = true,
                Location = resourceLocation
            };
        cdn.Endpoints.Create(endpointName, endpointParms, profileName, resourceGroupName);
    }
}

Uwaga

W powyższym przykładzie punkt końcowy przypisuje pochodzenie o nazwie Contoso z nazwą hosta www.contoso.com. Należy to zmienić, aby wskazać nazwę hosta własnego źródła.

Wyczyszczenie punktu końcowego

Zakładając, że punkt końcowy został utworzony, jednym z typowych zadań, które możemy wykonać w naszym programie, jest przeczyszczanie zawartości w naszym punkcie końcowym.

private static void PromptPurgeCdnEndpoint(CdnManagementClient cdn)
{
    if (PromptUser(String.Format("Purge CDN endpoint {0}?", endpointName)))
    {
        Console.WriteLine("Purging endpoint. Please wait...");
        cdn.Endpoints.PurgeContent(resourceGroupName, profileName, endpointName, new List<string>() { "/*" });
        Console.WriteLine("Done.");
        Console.WriteLine();
    }
}

Uwaga

W poprzednim przykładzie ciąg znaków /* oznacza, że chcę usunąć wszystko w katalogu głównym ścieżki punktu końcowego. Jest to równoważne z zaznaczeniem opcji Purge All w oknie dialogowym „purge” portalu Azure.

Usuwanie profilów i punktów końcowych usługi CDN

Ostatnie metody usuwają nasz punkt dostępu końcowego i profil.

private static void PromptDeleteCdnEndpoint(CdnManagementClient cdn)
{
    if(PromptUser(String.Format("Delete CDN endpoint {0} on profile {1}?", endpointName, profileName)))
    {
        Console.WriteLine("Deleting endpoint. Please wait...");
        cdn.Endpoints.DeleteIfExists(endpointName, profileName, resourceGroupName);
        Console.WriteLine("Done.");
        Console.WriteLine();
    }
}

private static void PromptDeleteCdnProfile(CdnManagementClient cdn)
{
    if(PromptUser(String.Format("Delete CDN profile {0}?", profileName)))
    {
        Console.WriteLine("Deleting profile. Please wait...");
        cdn.Profiles.DeleteIfExists(profileName, resourceGroupName);
        Console.WriteLine("Done.");
        Console.WriteLine();
    }
}

Uruchamianie programu

Teraz możemy skompilować i uruchomić program, klikając przycisk Start w programie Visual Studio.

Program działa

Gdy program osiągnie powyższy monit, powinno być możliwe powrót do grupy zasobów w witrynie Azure Portal i sprawdzenie, czy profil został utworzony.

Sukces!

Następnie możemy przyzwolić na uruchomienie pozostałej części programu.

Kończenie programu

Następne kroki

Aby uzyskać więcej informacji na temat biblioteki zarządzania usługi Azure CDN dla platformy .NET, zapoznaj się z dokumentacją w witrynie MSDN.

Zarządzanie zasobami usługi CDN za pomocą programu PowerShell.