Udostępnij przez


Uwierzytelnianie aplikacji C++ w usługach platformy Azure podczas programowania lokalnego przy użyciu kont deweloperów

Podczas programowania lokalnego aplikacje muszą uwierzytelniać się na platformie Azure, aby korzystać z różnych usług platformy Azure. Uwierzytelnij się lokalnie przy użyciu jednego z następujących metod:

W tym artykule wyjaśniono, jak uwierzytelniać się przy użyciu konta dewelopera przy użyciu narzędzi obsługiwanych przez bibliotekę tożsamości platformy Azure. W poniższych sekcjach nauczysz się:

  • Jak używać grup firmy Microsoft Entra do wydajnego zarządzania uprawnieniami dla wielu kont deweloperów.
  • Jak przypisywać role do kont deweloperów w celu określenia zakresu uprawnień.
  • Jak zalogować się do obsługiwanych lokalnych narzędzi programistycznych.
  • Jak uwierzytelniać się przy użyciu konta dewelopera z poziomu kodu aplikacji.

Obsługiwane narzędzia deweloperskie do uwierzytelniania

Aby aplikacja uwierzytelniła się na platformie Azure podczas programowania lokalnego przy użyciu poświadczeń platformy Azure dewelopera, deweloper musi zalogować się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

Biblioteka tożsamości platformy Azure może wykryć, że deweloper jest zalogowany z narzędzia. Biblioteka może następnie uzyskać token dostępu firmy Microsoft Entra za pośrednictwem narzędzia w celu uwierzytelnienia aplikacji na platformie Azure jako zalogowanego użytkownika.

Takie podejście korzysta z istniejących kont platformy Azure dewelopera w celu usprawnienia procesu uwierzytelniania. Jednak konto dewelopera prawdopodobnie ma więcej uprawnień niż wymagane przez aplikację, w związku z czym przekracza uprawnienia uruchamiane przez aplikację w środowisku produkcyjnym. Alternatywnie można utworzyć zasady usługi aplikacji do użytku w trakcie lokalnego rozwoju, którym można przypisać jedynie dostęp wymagany przez aplikację.

Utwórz grupę Microsoft Entra do rozwoju lokalnego

Utwórz grupę Entra w Microsoft, aby zgrupować role (uprawnienia), których aplikacja potrzebuje w środowisku lokalnym, zamiast przypisywać te role do poszczególnych obiektów głównych usługi. Takie podejście zapewnia następujące korzyści:

  • Każdy deweloper ma te same role przypisane na poziomie grupy.
  • Jeśli dla aplikacji jest potrzebna nowa rola, należy ją dodać tylko do grupy aplikacji.
  • Jeśli nowy deweloper dołączy do zespołu, zostanie utworzona nowa jednostka usługi aplikacji dla dewelopera i dodana do grupy, zapewniając deweloperowi odpowiednie uprawnienia do pracy nad aplikacją.
  1. Przejdź do strony przeglądu Microsoft Entra ID w portalu Azure.

  2. Wybierz pozycję Wszystkie grupy z menu po lewej stronie.

  3. Na stronie Grupy wybierz pozycję Nowa grupa.

  4. Na stronie Nowa grupa wypełnij następujące pola formularza:

    • Typ grupy: wybierz pozycję Security.
    • Nazwa grupy: wprowadź nazwę grupy, która zawiera odwołanie do nazwy aplikacji lub środowiska.
    • Opis grupy: wprowadź opis, który wyjaśnia przeznaczenie grupy.

    Zrzut ekranu przedstawiający sposób tworzenia grupy w witrynie Azure Portal.

  5. Wybierz link Nie wybrano członków w obszarze Członkowie, aby dodać członków do grupy.

  6. W wyświetlonym panelu wysuwanym wyszukaj utworzoną wcześniej jednostkę usługi i wybierz ją z filtrowanych wyników. Wybierz przycisk Wybierz w dolnej części panelu, aby potwierdzić wybór.

  7. Wybierz pozycję Utwórz w dolnej części strony Nowa grupa , aby utworzyć grupę i wrócić do strony Wszystkie grupy . Jeśli nie widzisz nowej grupy na liście, zaczekaj chwilę i odśwież stronę.

Przypisywanie ról do grupy

Następnie określ, jakich ról (uprawnień) potrzebuje twoja aplikacja na temat zasobów i przypisz te role do utworzonej grupy firmy Microsoft Entra. Grupy można przypisać do roli w zakresie zasobu, grupy zasobów lub subskrypcji. W tym przykładzie pokazano, jak przypisywać role w zakresie grupy zasobów, ponieważ większość aplikacji grupuje wszystkie zasoby platformy Azure w jedną grupę zasobów.

  1. W witrynie Azure Portal przejdź do strony Przegląd grupy zasobów zawierającej aplikację.

  2. Wybierz Kontrola dostępu (IAM) z nawigacji po lewej stronie.

  3. Na stronie Kontrola dostępu (zarządzanie dostępem i tożsamościami) wybierz pozycję + Dodaj , a następnie z menu rozwijanego wybierz pozycję Dodaj przypisanie roli . Strona Dodawanie przypisania roli zawiera kilka kart do konfigurowania i przypisywania ról.

  4. Na karcie Rola użyj pola wyszukiwania, aby zlokalizować rolę, którą chcesz przypisać. Wybierz rolę, a następnie wybierz pozycję Dalej.

  5. Na karcie Członkowie:

    • W polu Przypisz dostęp do wartości wybierz pozycję Użytkownik, grupa lub jednostka usługi .
    • Dla wartości Członkowie wybierz pozycję + Wybierz członków , aby otworzyć panel wysuwany Wybieranie członków .
    • Wyszukaj utworzoną wcześniej grupę Microsoft Entra i wybierz ją z filtrowanych wyników. Wybierz , a następnie, aby wybrać grupę i zamknąć wysuwane okno.
    • Wybierz Przejrzyj + przypisz na dole zakładki Członkowie.

    Zrzut ekranu przedstawiający sposób przypisywania roli do grupy Microsoft Entra.

  6. Na karcie Przeglądanie i przypisywanie wybierz pozycję Przejrzyj i przypisz w dolnej części strony.

Logowanie się do platformy Azure przy użyciu narzędzi deweloperskich

Zaloguj się do platformy Azure przy użyciu jednego z kilku narzędzi deweloperskich, których można użyć do przeprowadzenia uwierzytelniania w środowisku projektowym. Konto, które uwierzytelnisz, powinno również istnieć w utworzonej i skonfigurowanej wcześniej grupie Microsoft Entra.

Azure CLI

Deweloperzy mogą uwierzytelniać się przy użyciu interfejsu wiersza polecenia platformy Azure . Aplikacje korzystające z klasy DefaultAzureCredential lub AzureCliCredential mogą następnie używać tego konta do uwierzytelnienia żądań aplikacji.

Aby uwierzytelnić się za pomocą Azure CLI, uruchom polecenie az login. W systemie z domyślną przeglądarką internetową interfejs wiersza polecenia platformy Azure uruchamia przeglądarkę w celu uwierzytelnienia użytkownika.

az login

W przypadku systemów bez domyślnej przeglądarki internetowej polecenie az login używa przepływu uwierzytelniania kodu urządzenia. Użytkownik może również wymusić użycie przepływu kodu urządzenia przez Azure CLI zamiast uruchamiania przeglądarki, określając argument --use-device-code.

az login --use-device-code

Uwierzytelnianie w usługach platformy Azure z aplikacji

Biblioteka tożsamości platformy Azure dla języka C++ udostępnia różne poświadczenia dostosowane do obsługi różnych scenariuszy i przepływów uwierzytelniania firmy Microsoft Entra. Poniższe kroki pokazują, jak używać DefaultAzureCredential podczas pracy z lokalnymi kontami użytkowników.

Implementowanie kodu

Klasa DefaultAzureCredential to uporządkowana sekwencja mechanizmów uwierzytelniania w identyfikatorze Entra firmy Microsoft. Każdy mechanizm uwierzytelniania jest klasą pochodzącą z TokenCredential klasy i jest nazywana poświadczeniami. W tym scenariuszu DefaultAzureCredential sprawdza w sposób sekwencyjny, czy deweloper zalogował się na platformie Azure przez Azure CLI. Jeśli deweloper jest zalogowany w Azure CLI, to aplikacja używa poświadczeń używanych do logowania się do tego narzędzia, aby uwierzytelnić się na platformie Azure. Aby uzyskać więcej informacji na temat dostosowywania łańcucha poświadczeń, zobacz Jak dostosować DefaultAzureCredential.

  1. Dodaj pakiet azure-identity-cpp do aplikacji przy użyciu narzędzia vcpkg.

    vcpkg add port azure-identity-cpp
    
  2. Dodaj następujące wiersze w pliku CMake:

    find_package(azure-identity-cpp CONFIG REQUIRED)
    target_link_libraries(<your project name> PRIVATE Azure::azure-identity)
    
  3. W przypadku dowolnego kodu języka C++, który tworzy obiekt klienta zestawu Azure SDK w aplikacji, chcesz:

    1. azure/identity.hpp Dołącz nagłówek.

    2. Użyj DefaultAzureCredential lub AzureCliCredential, aby utworzyć wystąpienie poświadczenia. Przykład:

      • Aby użyć DefaultAzureCredential, ustaw zmienną środowiskową AZURE_TOKEN_CREDENTIALS na dev , która wskazuje, że aplikacja jest uruchomiona w środowisku dewelopera. Aby uzyskać więcej informacji, zobacz Jak dostosować DefaultAzureCredential.

        // Environment variable AZURE_TOKEN_CREDENTIALS=dev
        auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>(true);
        
      • Zawsze używaj AzureCliCredential do uwierzytelniania za pomocą zalogowanego użytkownika Azure CLI.

        auto credential = std::make_shared<Azure::Identity::AzureCliCredential>();
        
    3. Przekaż wystąpienie DefaultAzureCredential lub AzureCliCredential do konstruktora klienta zestawu Azure SDK.

    Przykład tych kroków przedstawiono w następującym segmencie kodu. Przykład tworzy klienta obiektów blob usługi Azure Storage, używając DefaultAzureCredential do uwierzytelniania na platformie Azure.

    #include <azure/identity.hpp>
    #include <azure/storage/blobs.hpp>
    #include <iostream>
    #include <memory>
    
    int main() {
        try {
            // DefaultAzureCredential supports dev, test, and prod environments.
            // See documentation for details on customizing the credential chain:
            // https://learn.microsoft.com/azure/developer/cpp/sdk/authentication/credential-chains#defaultazurecredential-overview
            // In production, it's better to use a specific credential type so authentication is more predictable and easier to debug.
            // Here DefaultAzureCredential is used for local development and environment variable AZURE_TOKEN_CREDENTIALS=dev
    
            auto credential = std::make_shared<Azure::Identity::DefaultAzureCredential>(true);
    
            // Or use AzureCliCredential to always use the Azure CLI signed-in user to authenticate
            // auto credential = std::make_shared<Azure::Identity::AzureCliCredential>();
    
            // Create a client for the specified storage account
            std::string accountUrl = "https://<replace_with_your_storage_account_name>.blob.core.windows.net/";
            Azure::Storage::Blobs::BlobServiceClient blobServiceClient(accountUrl, credential);
    
            // Get a reference to a container
            std::string containerName = "sample-container";
            auto containerClient = blobServiceClient.GetBlobContainerClient(containerName);
    
            // TODO: perform some action with the blob client
            // auto blobClient = containerClient.GetBlobClient("sample-blob");
            // auto downloadResult = blobClient.DownloadTo("path/to/local/file");
    
        } catch (const std::exception& ex) {
            std::cout << "Exception: " << ex.what() << std::endl;
            return 1;
        }
    
        return 0;
    }