Wprowadzenie do biblioteki azure CDN dla platformy .NET

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 samouczku przedstawiono proces tworzenia prostej aplikacji konsolowej platformy .NET, która demonstruje kilka dostępnych operacji. 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 firmy Microsoft Entra mogli wchodzić w interakcje z profilem usługi CDN

Tworzenie grupy zasobów

  1. Zaloguj się do Portalu Azure.

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

  3. Wyszukaj pozycję Grupa zasobów i w okienku Grupa zasobów kliknij 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 kliknąć 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 kliknij przycisk Utwórz.

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

  5. Jeśli grupa zasobów nie została przypięta do pulpitu nawigacyjnego, możesz ją znaleźć, klikając pozycję Przeglądaj, a następnie pozycję Grupy zasobów. Aby go otworzyć, kliknij 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. Jednostka usługi jest podobna do konta usługi 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 pisze interaktywną aplikację konsolową, skoncentrujemy się na podejściu jednostki usługi.

Tworzenie jednostki usługi składa się z kilku kroków, w tym tworzenia aplikacji firmy Microsoft Entra. Aby go utworzyć , użyjemy tego samouczka.

Ważne

Pamiętaj, aby wykonać wszystkie kroki opisane w połą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ółautor profilu usługi CDN w grupie zasobów wróć do tego samouczka.

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

Blok Użytkownicy

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 te następne kroki tylko wtedy, gdy 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.

    Aplikacji macierzystej

  2. Na następnej stronie zostanie wyświetlony monit 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 przypisano użytkownika demonstracyjnego usługi CDN do roli Współautor profilu usługi 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 stronie. 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

Pobierzmy podstawową strukturę naszego programu napisanego.

  1. Na karcie Program.cs zastąp using dyrektywy u góry 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. Program W klasie , ale przed Main metodą 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 usługi Azure CDN, musimy uwierzytelnić jednostkę 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żyj tego przykładu kodu tylko wtedy, gdy zdecydujesz się na uwierzytelnianie poszczególnych użytkowników zamiast jednostki 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 wprowadzonym podczas rejestrowania aplikacji w identyfikatorze Entra firmy Microsoft.

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 lista wszystkich profilów i punktów końcowych w naszej grupie zasobów, a jeśli znajdzie dopasowanie nazw profilów i punktów końcowych określonych w naszych stałych, zanotuj później, aby nie próbować 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 utworzymy 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 punkt końcowy pochodzenia o nazwie Contoso z nazwą www.contoso.comhosta . Należy to zmienić, aby wskazać nazwę hosta własnego źródła.

Przeczyszczanie 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 powyższym przykładzie ciąg /* oznacza, że chcę przeczyścić wszystko w katalogu głównym ścieżki punktu końcowego. Jest to odpowiednik sprawdzania przeczyszczania wszystkich w oknie dialogowym "przeczyszczanie" witryny Azure Portal. W metodzie CreateCdnProfile utworzono nasz profil jako usługę Azure CDN z profilu Edgio przy użyciu kodu Sku = new Sku(SkuName.StandardVerizon), więc zakończy się to pomyślnie.

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

Ostatnie metody usuwają nasz punkt końcowy 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.

Uruchomiony program

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.

To wszystko!

Następnie możemy potwierdzić monity o uruchomienie pozostałej części programu.

Kończenie programu

Następne kroki

Aby wyświetlić ukończony projekt z tego przewodnika, pobierz przykład.

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.