Jak uwierzytelniać aplikacje platformy .NET w usługach platformy Azure przy użyciu zestawu .NET Azure SDK

Gdy aplikacja musi uzyskać dostęp do zasobu platformy Azure, takiego jak magazyn, magazyn kluczy lub usługi Cognitive Services, aplikacja musi zostać uwierzytelniona na platformie Azure. Dotyczy to wszystkich aplikacji, zarówno wdrożonych na platformie Azure, wdrożonych lokalnie, jak i w ramach programowania na lokalnej stacji roboczej dewelopera. W tym artykule opisano zalecane podejścia do uwierzytelniania aplikacji na platformie Azure podczas korzystania z zestawu Azure SDK dla platformy .NET.

Zaleca się, aby aplikacje używały uwierzytelniania opartego na tokenach, a nie parametry połączenia podczas uwierzytelniania w zasobach platformy Azure. Zestaw Azure SDK dla platformy .NET udostępnia klasy, które obsługują uwierzytelnianie oparte na tokenach i umożliwiają aplikacjom bezproblemowe uwierzytelnianie w zasobach platformy Azure niezależnie od tego, czy aplikacja jest w środowisku lokalnym, wdrożona na platformie Azure, czy wdrożona na serwerze lokalnym.

Określony typ uwierzytelniania opartego na tokenach, którego aplikacja powinna używać do uwierzytelniania w zasobach platformy Azure, zależy od tego, gdzie jest uruchamiana aplikacja i jest wyświetlana na poniższym diagramie.

Diagram przedstawiający zalecane strategie uwierzytelniania oparte na tokenach dla aplikacji w zależności od tego, gdzie jest uruchomiona.

  • Gdy deweloper uruchamia aplikację podczas programowania lokalnego — aplikacja może uwierzytelniać się na platformie Azure przy użyciu jednostki usługi aplikacji na potrzeby programowania lokalnego lub przy użyciu poświadczeń platformy Azure dewelopera. Każda z tych opcji została omówiona bardziej szczegółowo w sekcji uwierzytelniania podczas programowania lokalnego.
  • Gdy aplikacja jest hostowana na platformie Azure — aplikacja powinna uwierzytelniać się w zasobach platformy Azure przy użyciu tożsamości zarządzanej. Ta opcja została omówiona bardziej szczegółowo poniżej w sekcji uwierzytelnianie w środowiskach serwera.
  • Gdy aplikacja jest hostowana i wdrożona lokalnie — aplikacja powinna uwierzytelniać się w zasobach platformy Azure przy użyciu jednostki usługi aplikacji. Ta opcja została omówiona bardziej szczegółowo poniżej w sekcji uwierzytelnianie w środowiskach serwera.

Wartość domyślnaAzureCredential

Klasa DefaultAzureCredential dostarczana przez zestaw Azure SDK umożliwia aplikacjom korzystanie z różnych metod uwierzytelniania w zależności od środowiska, w których są uruchamiane. Dzięki temu aplikacje mogą być promowane z lokalnego programowania do środowisk testowych do środowiska produkcyjnego bez zmian kodu. Należy skonfigurować odpowiednią metodę uwierzytelniania dla każdego środowiska i DefaultAzureCredential automatycznie wykrywać i używać tej metody uwierzytelniania. Użycie elementu powinno być preferowane w przypadku ręcznego DefaultAzureCredential kodowania logiki warunkowej lub flag funkcji do używania różnych metod uwierzytelniania w różnych środowiskach.

Szczegółowe informacje o korzystaniu z DefaultAzureCredential klasy opisano w dalszej części tego artykułu w sekcji Używanie DefaultAzureCredential w aplikacji.

Zalety uwierzytelniania opartego na tokenach

Uwierzytelnianie oparte na tokenach jest zdecydowanie zalecane w przypadku używania parametry połączenia podczas tworzenia aplikacji dla platformy Azure. Uwierzytelnianie oparte na tokenach oferuje następujące korzyści wynikające z uwierzytelniania przy użyciu parametry połączenia.

  • Metody uwierzytelniania oparte na tokenach opisane poniżej umożliwiają ustanowienie określonych uprawnień wymaganych przez aplikację w zasobie platformy Azure. Jest to zgodne z zasadą najniższych uprawnień. Natomiast parametry połączenia przyznaje pełne prawa do zasobu platformy Azure.
  • Podczas gdy każda osoba lub dowolna aplikacja z parametry połączenia może połączyć się z zasobem platformy Azure, metody uwierzytelniania oparte na tokenach umożliwiają dostęp do zasobu tylko do aplikacji przeznaczonych do uzyskania dostępu do zasobu.
  • W przypadku tożsamości zarządzanej nie ma wpisu tajnego aplikacji do przechowywania. Dzięki temu aplikacja jest bezpieczniejsza, ponieważ nie ma parametry połączenia ani wpisu tajnego aplikacji, niż można naruszyć bezpieczeństwo.
  • Pakiet Azure.Identity w zestawie Azure SDK zarządza tokenami za kulisami. Dzięki temu użycie uwierzytelniania opartego na tokenach jest łatwe w użyciu jako parametry połączenia.

Korzystanie z parametry połączenia powinno być ograniczone do początkowego sprawdzania koncepcji lub prototypów programistycznych, które nie uzyskują dostępu do danych produkcyjnych ani poufnych. W przeciwnym razie klasy uwierzytelniania oparte na tokenach dostępne w zestawie Azure SDK powinny być zawsze preferowane podczas uwierzytelniania w zasobach platformy Azure.

Uwierzytelnianie w środowiskach serwera

W przypadku hostowania w środowisku serwera każda aplikacja powinna mieć przypisaną unikatową tożsamość aplikacji dla każdego środowiska, w którym jest uruchamiana aplikacja. Na platformie Azure tożsamość aplikacji jest reprezentowana przez jednostkę usługi, specjalny typ podmiotu zabezpieczeń przeznaczonego do identyfikowania i uwierzytelniania aplikacji na platformie Azure. Typ jednostki usługi używanej dla aplikacji zależy od tego, gdzie aplikacja jest uruchomiona.

Metoda uwierzytelniania opis
Aplikacje hostowane na platformie Azure Aplikacje hostowane na platformie Azure powinny używać jednostki usługi tożsamości zarządzanej. Tożsamości zarządzane są przeznaczone do reprezentowania tożsamości aplikacji hostowanej na platformie Azure i mogą być używane tylko z aplikacjami hostowanymi na platformie Azure.

Na przykład aplikacja internetowa platformy .NET hostowana w usłudze aplikacja systemu Azure ma przypisaną tożsamość zarządzaną. Tożsamość zarządzana przypisana do aplikacji będzie następnie używana do uwierzytelniania aplikacji w innych usługach platformy Azure.

Aplikacje hostowane poza platformą Azure
(na przykład aplikacje lokalne)
Aplikacje hostowane poza platformą Azure (na przykład aplikacje lokalne), które muszą łączyć się z usługami platformy Azure, powinny używać jednostki usługi Aplikacji. Jednostka usługi aplikacji reprezentuje tożsamość aplikacji na platformie Azure i jest tworzona za pośrednictwem procesu rejestracji aplikacji.

Rozważmy na przykład aplikację internetową platformy .NET hostowaną lokalnie, która korzysta z usługi Azure Blob Storage. Należy utworzyć jednostkę usługi aplikacji dla aplikacji przy użyciu procesu rejestracji aplikacji. Wszystkie AZURE_CLIENT_IDwartości , AZURE_TENANT_IDi AZURE_CLIENT_SECRET będą przechowywane jako zmienne środowiskowe, które mają być odczytywane przez aplikację w czasie wykonywania i umożliwiają aplikacji uwierzytelnianie na platformie Azure przy użyciu jednostki usługi aplikacji.

Uwierzytelnianie podczas programowania lokalnego

Gdy aplikacja jest uruchamiana na stacji roboczej dewelopera podczas programowania lokalnego, nadal musi uwierzytelniać się w dowolnych usługach platformy Azure używanych przez aplikację. Dwie główne strategie uwierzytelniania aplikacji na platformie Azure podczas programowania lokalnego to:

Metoda uwierzytelniania opis
Tworzenie obiektów jednostki usługi dedykowanej aplikacji do użycia podczas tworzenia lokalnego W tej metodzie obiekty jednostki usługi dedykowanej aplikacji są konfigurowane przy użyciu procesu rejestracji aplikacji do użycia podczas tworzenia lokalnego. Tożsamość jednostki usługi jest następnie przechowywana jako zmienne środowiskowe, które mają być dostępne przez aplikację podczas jej uruchamiania w środowisku lokalnym.

Ta metoda umożliwia przypisanie określonych uprawnień zasobów wymaganych przez aplikację do obiektów jednostki usługi używanych przez deweloperów podczas programowania lokalnego. Dzięki temu aplikacja ma dostęp tylko do określonych potrzebnych zasobów i replikuje uprawnienia, które aplikacja będzie miała w środowisku produkcyjnym.

Wadą tego podejścia jest utworzenie oddzielnych obiektów jednostki usługi dla każdego dewelopera, który działa w aplikacji.

Uwierzytelnianie aplikacji na platformie Azure przy użyciu poświadczeń dewelopera podczas programowania lokalnego W tej metodzie deweloper musi zalogować się do platformy Azure z poziomu programu Visual Studio, rozszerzenia Azure Tools dla programu VS Code, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell na lokalnej stacji roboczej. Aplikacja może następnie uzyskać dostęp do poświadczeń dewelopera z magazynu poświadczeń i użyć tych poświadczeń, aby uzyskać dostęp do zasobów platformy Azure z aplikacji.

Ta metoda ma zaletę łatwiejszej konfiguracji, ponieważ deweloper musi zalogować się tylko do konta platformy Azure z poziomu programu Visual Studio, programu VS Code lub interfejsu wiersza polecenia platformy Azure. Wadą tego podejścia jest to, że konto dewelopera prawdopodobnie ma więcej uprawnień niż wymagane przez aplikację. W związku z tym takie podejście nie replikuje dokładnie uprawnień, z których aplikacja będzie uruchamiana w środowisku produkcyjnym.

Używanie wartości defaultAzureCredential w aplikacji

DefaultAzureCredential obsługuje wiele metod uwierzytelniania i określa metodę uwierzytelniania używaną w czasie wykonywania. W ten sposób aplikacja może używać różnych metod uwierzytelniania w różnych środowiskach bez implementowania kodu specyficznego dla środowiska.

Kolejność i lokalizacje, w których DefaultAzureCredential wyszukiwanie poświadczeń znajduje się w obszarze DefaultAzureCredential.

Aby zaimplementować element DefaultAzureCredential, najpierw dodaj Azure.Identity pakiety i opcjonalnie Microsoft.Extensions.Azure do aplikacji. Można to zrobić przy użyciu wiersza polecenia lub Menedżer pakietów NuGet.

Otwórz wybrane środowisko terminalowe w katalogu projektu aplikacji i wprowadź poniższe polecenie.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Dostęp do usług platformy Azure jest zwykle uzyskiwany przy użyciu odpowiednich klas klientów z zestawu SDK. Te klasy i własne usługi niestandardowe powinny być zarejestrowane w Program.cs pliku, aby można było uzyskać do nich dostęp za pośrednictwem wstrzykiwania zależności w całej aplikacji. W pliku Program.cswykonaj poniższe kroki, aby poprawnie skonfigurować usługę i DefaultAzureCredential.

  1. Uwzględnij Azure.Identity przestrzenie nazw i Microsoft.Extensions.Azure z instrukcją using.
  2. Zarejestruj usługę platformy Azure przy użyciu odpowiednich metod pomocnika.
  3. Przekaż wystąpienie DefaultAzureCredential obiektu do UseCredential metody .

Przykład jest pokazany w następującym segmencie kodu.

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

Alternatywnie możesz również korzystać DefaultAzureCredential z usług bardziej bezpośrednio bez pomocy dodatkowych metod rejestracji platformy Azure, jak pokazano poniżej.

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Gdy powyższy kod jest uruchamiany na lokalnej stacji roboczej podczas programowania lokalnego, będzie on wyglądał w zmiennych środowiskowych dla jednostki usługi aplikacji lub w programie Visual Studio, VS Code, interfejsie wiersza polecenia platformy Azure lub programie Azure PowerShell dla zestawu poświadczeń dewelopera, których można użyć do uwierzytelniania aplikacji w zasobach platformy Azure podczas programowania lokalnego.

Po wdrożeniu na platformie Azure ten sam kod może również uwierzytelniać aplikację w innych zasobach platformy Azure. DefaultAzureCredential program może automatycznie pobierać ustawienia środowiska i konfiguracje tożsamości zarządzanej w celu automatycznego uwierzytelniania w innych usługach.

Eksplorowanie sekwencji metod uwierzytelniania DefaultAzureCredential

DefaultAzureCredential Wewnętrznie implementuje łańcuch dostawców poświadczeń na potrzeby uwierzytelniania aplikacji w zasobach platformy Azure. Każdy dostawca poświadczeń może wykryć, czy poświadczenia tego typu są skonfigurowane dla aplikacji. DefaultAzureCredential sekwencyjnie sprawdza każdego dostawcę w kolejności i używa poświadczeń od pierwszego dostawcy, który ma skonfigurowane poświadczenia.

Kolejność i lokalizacje, w których DefaultAzureCredential wyszukiwanie poświadczeń znajduje się w obszarze DefaultAzureCredential.

Typ poświadczeń opis
Jednostka usługi aplikacji DefaultAzureCredential Odczytuje zestaw zmiennych środowiskowych w celu określenia, czy dla aplikacji została ustawiona jednostka usługi aplikacji (użytkownik aplikacji). Jeśli tak, DefaultAzureCredential użyj tych wartości do uwierzytelniania aplikacji na platformie Azure.

Ta metoda jest najczęściej używana w środowiskach serwera, ale może być również używana podczas opracowywania lokalnie.
Tożsamość zarządzana Jeśli aplikacja zostanie wdrożona na hoście platformy Azure z włączoną tożsamością zarządzaną, DefaultAzureCredential uwierzytelni aplikację na platformie Azure przy użyciu tej tożsamości zarządzanej. Uwierzytelnianie przy użyciu tożsamości zarządzanej zostało omówione w sekcji Uwierzytelnianie w środowiskach serwera w tym dokumencie.

Ta metoda jest dostępna tylko wtedy, gdy aplikacja jest hostowana na platformie Azure przy użyciu usługi, takiej jak aplikacja systemu Azure Service, Azure Functions lub Azure Virtual Machines.
Visual Studio Jeśli deweloper uwierzytelnił się na platformie Azure, logując się do programu Visual Studio, DefaultAzureCredential uwierzytelni aplikację na platformie Azure przy użyciu tego samego konta.
Visual Studio Code Jeśli deweloper uwierzytelnił się na platformie Azure przy użyciu wtyczki konta platformy Azure programu Visual Studio Code, DefaultAzureCredential uwierzytelni aplikację na platformie Azure przy użyciu tego samego konta.
Interfejs wiersza polecenia platformy Azure Jeśli deweloper uwierzytelnił się na platformie Azure przy użyciu az login polecenia w interfejsie wiersza polecenia platformy Azure, DefaultAzureCredential uwierzytelni aplikację na platformie Azure przy użyciu tego samego konta.
Azure PowerShell Jeśli deweloper uwierzytelnił się na platformie Azure przy użyciu Connect-AzAccount polecenia cmdlet z programu Azure PowerShell, DefaultAzureCredential uwierzytelni aplikację na platformie Azure przy użyciu tego samego konta.
Interakcyjny Jeśli ta opcja jest włączona, DefaultAzureCredential program będzie interaktywnie uwierzytelniać dewelopera za pośrednictwem domyślnej przeglądarki bieżącego systemu. Domyślnie ta opcja jest wyłączona.