Uwierzytelnianie aplikacji platformy .NET w usługach platformy Azure podczas programowania lokalnego przy użyciu jednostek usługi

Deweloperzy muszą debugować i testować aplikacje w chmurze na lokalnej stacji roboczej. Gdy aplikacja działa na stacji roboczej dewelopera podczas programowania lokalnego, musi ona nadal uwierzytelniać się w dowolnych usługach platformy Azure używanych przez aplikację. W tym artykule opisano sposób konfigurowania dedykowanych obiektów jednostki usługi aplikacji, które mają być używane podczas programowania lokalnego.

Diagram pokazujący, jak lokalna aplikacja .NET używa poświadczeń dewelopera do łączenia się z platformą Azure przy użyciu lokalnie zainstalowanych narzędzi programistycznych.

Dedykowane jednostki usługi aplikacji na potrzeby tworzenia aplikacji lokalnych umożliwiają przestrzeganie zasady najniższych uprawnień podczas tworzenia aplikacji. Ponieważ uprawnienia są ograniczone do dokładnie tego, co jest potrzebne dla aplikacji podczas programowania, kod aplikacji nie może przypadkowo uzyskać dostępu do zasobu platformy Azure przeznaczonego do użytku przez inną aplikację. Zapobiega to również występowaniu usterek podczas przenoszenia aplikacji do środowiska produkcyjnego, ponieważ aplikacja była nadmiernie uprzywilejowana w środowisku deweloperskim.

Jednostka usługi aplikacji jest skonfigurowana dla aplikacji, gdy aplikacja jest zarejestrowana na platformie Azure. Podczas rejestrowania aplikacji na potrzeby programowania lokalnego zaleca się:

  • Utwórz oddzielną rejestrację aplikacji dla każdego dewelopera pracującego nad aplikacją. Spowoduje to utworzenie oddzielnych jednostek usługi aplikacji dla każdego dewelopera do użycia podczas programowania lokalnego i uniknięcie konieczności przez deweloperów udostępniania poświadczeń dla pojedynczej jednostki usługi aplikacji.
  • Utwórz oddzielną rejestrację aplikacji na aplikację. Obejmuje to uprawnienia aplikacji tylko do tego, co jest potrzebne przez aplikację.

Podczas programowania lokalnego zmienne środowiskowe są ustawiane przy użyciu tożsamości jednostki usługi aplikacji. Biblioteka tożsamości platformy Azure odczytuje te zmienne środowiskowe i używa tych informacji do uwierzytelniania aplikacji w potrzebnych zasobach platformy Azure.

1 — Rejestrowanie aplikacji na platformie Azure

Obiekty jednostki usługi aplikacji są tworzone przy użyciu rejestracji aplikacji na platformie Azure. Można to zrobić przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure.

Zaloguj się do witryny Azure Portal i wykonaj następujące kroki.

Instrukcje Zrzut ekranu
W witrynie Azure Portal:
  1. Wprowadź rejestracje aplikacji na pasku wyszukiwania w górnej części witryny Azure Portal.
  2. Wybierz element z etykietą Rejestracje aplikacji w obszarze nagłówka Usługi w menu wyświetlanym poniżej paska wyszukiwania.
Zrzut ekranu przedstawiający sposób użycia górnego paska wyszukiwania w witrynie Azure Portal w celu znalezienia i przejścia do strony Rejestracje aplikacji.
Na stronie Rejestracje aplikacji wybierz pozycję + Nowa rejestracja. Zrzut ekranu przedstawiający lokalizację przycisku Nowa rejestracja na stronie Rejestracje aplikacji.
Na stronie Rejestrowanie aplikacji wypełnij formularz w następujący sposób.
  1. Nazwa → wprowadź nazwę rejestracji aplikacji na platformie Azure. Zaleca się, aby ta nazwa zawierała nazwę aplikacji, dla użytkownika, dla których jest rejestracja aplikacji, oraz identyfikator taki jak "dev", aby wskazać, że ta rejestracja aplikacji jest używana w środowisku lokalnym.
  2. Obsługiwane typy kont → Konta tylko w tym katalogu organizacyjnym.
Wybierz pozycję Zarejestruj, aby zarejestrować aplikację i utworzyć jednostkę usługi aplikacji.
Zrzut ekranu przedstawiający sposób wypełniania strony Rejestrowanie aplikacji przez nadanie aplikacji nazwy i określanie obsługiwanych typów kont jako kont tylko w tym katalogu organizacyjnym.
Na stronie Rejestracja aplikacji dla aplikacji:
  1. Identyfikator aplikacji (klienta) → Jest to identyfikator aplikacji, który będzie używany do uzyskiwania dostępu do platformy Azure podczas programowania lokalnego. Skopiuj tę wartość do lokalizacji tymczasowej w edytorze tekstów, ponieważ będzie ona potrzebna w przyszłym kroku.
  2. Identyfikator katalogu (dzierżawy) → Ta wartość będzie również potrzebna przez aplikację podczas uwierzytelniania na platformie Azure. Skopiuj tę wartość do lokalizacji tymczasowej w edytorze tekstów, ponieważ będzie ona również potrzebna w przyszłym kroku.
  3. Poświadczenia klienta → Należy ustawić poświadczenia klienta dla aplikacji, zanim aplikacja będzie mogła uwierzytelnić się na platformie Azure i korzystać z usług platformy Azure. Wybierz pozycję Dodaj certyfikat lub wpis tajny , aby dodać poświadczenia dla aplikacji.
Zrzut ekranu przedstawiający stronę rejestracji aplikacji po zakończeniu rejestracji aplikacji. Ten zrzut ekranu przedstawia lokalizację identyfikatora aplikacji i identyfikatora dzierżawy, która będzie potrzebna w przyszłym kroku. Zawiera również lokalizację linku, który ma zostać użyty do dodania wpisu tajnego aplikacji dla aplikacji.
Na stronie Certyfikaty i wpisy tajne wybierz pozycję + Nowy klucz tajny klienta. Zrzut ekranu przedstawiający lokalizację linku do utworzenia nowego wpisu tajnego klienta na stronie certyfikatów i wpisów tajnych.
W oknie dialogowym Dodawanie wpisu tajnego klienta zostanie wyświetlone okno dialogowe po prawej stronie. W tym oknie dialogowym:
  1. Opis → Wprowadź wartość Current.
  2. Wygasa → wybierz wartość 24 miesięcy.
Wybierz pozycję Dodaj , aby dodać wpis tajny.
Zrzut ekranu przedstawiający stronę, na której jest dodawany nowy wpis tajny klienta dla jednostki usługi aplikacji utworzonej przez proces rejestracji aplikacji.
Na stronie Certyfikaty i wpisy tajne zostanie wyświetlona wartość klucza tajnego klienta.

Skopiuj tę wartość do lokalizacji tymczasowej w edytorze tekstów, ponieważ będzie ona potrzebna w przyszłym kroku.

WAŻNE: jest to jedyna godzina wyświetlenia tej wartości. Po opuszczeniu lub odświeżeniu tej strony nie będzie można ponownie wyświetlić tej wartości. Możesz dodać dodatkowy klucz tajny klienta bez unieważnienia tego wpisu tajnego klienta, ale ta wartość nie zostanie ponownie wyświetlona.
Zrzut ekranu przedstawiający stronę z wygenerowanym wpisem tajnym klienta.

2 — Tworzenie grupy Microsoft Entra na potrzeby programowania lokalnego

Ponieważ zazwyczaj istnieje wiele deweloperów, którzy pracują nad aplikacją, zaleca się utworzenie grupy Entra firmy Microsoft w celu hermetyzacji ról (uprawnień) wymaganych przez aplikację w środowisku lokalnym zamiast przypisywania ról do poszczególnych obiektów jednostki usługi. Takie podejście zapewnia następujące korzyści:

  • Każdy deweloper ma przypisane te same role, ponieważ role są przypisywane 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ą.
Instrukcje Zrzut ekranu
Przejdź do strony Microsoft Entra ID w witrynie Azure Portal, wpisując ciąg Microsoft Entra ID w polu wyszukiwania w górnej części strony. Wybierz pozycję Microsoft Entra ID w sekcji Usługi . Zrzut ekranu przedstawiający sposób używania górnego paska wyszukiwania w witrynie Azure Portal do wyszukiwania i przechodzenia do strony Identyfikator entra firmy Microsoft.
Na stronie Microsoft Entra ID wybierz pozycję Grupy z menu po lewej stronie. Zrzut ekranu przedstawiający lokalizację elementu menu Grupy w menu po lewej stronie katalogu domyślnego firmy Microsoft.
Na stronie Wszystkie grupy wybierz pozycję Nowa grupa. Zrzut ekranu przedstawiający lokalizację przycisku Nowa grupa na stronie Wszystkie grupy.
Na stronie Nowa grupa:
  1. Typ grupy → Zabezpieczenia
  2. Nazwa grupy → nazwa grupy zabezpieczeń, zazwyczaj utworzona na podstawie nazwy aplikacji. Warto również uwzględnić ciąg, taki jak local-dev w nazwie grupy, aby wskazać cel grupy.
  3. Opis grupy → Opis celu grupy.
  4. Wybierz link Brak wybranych członków w obszarze Członkowie, aby dodać członków do grupy.
Zrzut ekranu przedstawiający sposób wypełniania formularza w celu utworzenia nowej grupy Microsoft Entra dla aplikacji. Ten zrzut ekranu przedstawia również lokalizację linku do wybrania w celu dodania członków do tej grupy.
W oknie dialogowym Dodawanie członków:
  1. Użyj pola wyszukiwania, aby filtrować listę głównych nazw na liście.
  2. Wybierz jednostki usługi aplikacji dla programowania lokalnego dla tej aplikacji. Gdy obiekty są zaznaczone, będą wyszarzone i przenoszone do listy Wybrane elementy w dolnej części okna dialogowego.
  3. Po zakończeniu wybierz przycisk Wybierz .
Zrzut ekranu okna dialogowego Dodawanie członków przedstawiający sposób wybierania jednostek usługi aplikacji, które mają być uwzględnione w grupie.
Po powrocie na stronę Nowa grupa wybierz pozycję Utwórz , aby utworzyć grupę.

Grupa zostanie utworzona i nastąpi powrót do strony Wszystkie grupy . Wyświetlenie grupy może potrwać do 30 sekund. Może być konieczne odświeżenie strony z powodu buforowania w witrynie Azure Portal.
Zrzut ekranu przedstawiający stronę Nowa grupa przedstawiająca sposób ukończenia procesu, wybierając przycisk Utwórz.

3 — Przypisywanie ról do aplikacji

Następnie określ, jakich ról (uprawnień) potrzebuje twoja aplikacja na temat zasobów i przypisz te role do aplikacji. W tym przykładzie role zostaną przypisane do grupy Microsoft Entra utworzonej w kroku 2. 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.

Instrukcje Zrzut ekranu
Znajdź grupę zasobów aplikacji, wyszukując nazwę grupy zasobów przy użyciu pola wyszukiwania w górnej części witryny Azure Portal. Przejdź do grupy zasobów, wybierając nazwę grupy zasobów pod nagłówkiem Grupy zasobów w oknie dialogowym. Zrzut ekranu przedstawiający sposób użycia górnego pola wyszukiwania w witrynie Azure Portal w celu zlokalizowania i przejścia do grupy zasobów, do której chcesz przypisać role (uprawnienia).
Na stronie grupy zasobów wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) z menu po lewej stronie. Zrzut ekranu przedstawiający stronę grupy zasobów z lokalizacją elementu menu Kontrola dostępu (IAM).
Na stronie Kontrola dostępu (Zarządzanie dostępem i tożsamościami):
  1. Wybierz kartę Przypisania roli.
  2. Wybierz pozycję + Dodaj z górnego menu, a następnie pozycję Dodaj przypisanie roli z wyświetlonego menu rozwijanego.
Zrzut ekranu przedstawiający sposób przechodzenia do karty przypisania ról i lokalizacji przycisku używanego do dodawania przypisań ról do grupy zasobów.
Strona Dodawanie przypisania roli zawiera listę wszystkich ról, które można przypisać dla grupy zasobów.
  1. Użyj pola wyszukiwania, aby przefiltrować listę do bardziej możliwego do zarządzania rozmiaru. W tym przykładzie pokazano, jak filtrować role obiektów blob usługi Storage.
  2. Wybierz rolę, którą chcesz przypisać.
Wybierz przycisk Dalej , aby przejść do następnego ekranu.
Zrzut ekranu przedstawiający sposób filtrowania i wybierania przypisań ról do dodania do grupy zasobów.
Następna strona Dodawanie przypisania roli umożliwia określenie, do którego użytkownika ma zostać przypisana rola.
  1. Wybierz pozycję Użytkownik, grupa lub jednostka usługi w obszarze Przypisz dostęp do.
  2. Wybierz pozycję + Wybierz członków w obszarze Członkowie.
Zostanie otwarte okno dialogowe po prawej stronie witryny Azure Portal.
Zrzut ekranu przedstawiający przycisk radiowy do wybrania w celu przypisania roli do grupy Microsoft Entra i linku użytego do wybrania grupy w celu przypisania roli.
W oknie dialogowym Wybieranie członków:
  1. Pole tekstowe Wybierz może służyć do filtrowania listy użytkowników i grup w ramach subskrypcji. W razie potrzeby wpisz kilka pierwszych znaków lokalnej grupy deweloperów firmy Microsoft Entra utworzonej dla aplikacji.
  2. Wybierz lokalną grupę deweloperów firmy Microsoft skojarzona z twoją aplikacją.
Wybierz pozycję Wybierz w dolnej części okna dialogowego, aby kontynuować.
Zrzut ekranu przedstawiający sposób filtrowania i wybierania grupy Microsoft Entra dla aplikacji w oknie dialogowym Wybieranie członków.
Grupa Microsoft Entra jest wyświetlana jako wybrana na ekranie Dodawanie przypisania roli. Wybierz pozycję Przejrzyj i przypisz , aby przejść do ostatniej strony, a następnie ponownie przejrzyj i przypisz, aby ukończyć proces. Zrzut ekranu przedstawiający ukończoną stronę Dodawanie przypisania roli i lokalizację przycisku Przeglądanie i przypisywanie używanego do ukończenia procesu.

4 — Ustawianie zmiennych środowiskowych aplikacji

W czasie wykonywania DefaultAzureCredential wyszukuje informacje o jednostce usługi w kolekcji zmiennych środowiskowych. Istnieje wiele sposobów konfigurowania zmiennych środowiskowych podczas pracy z platformą .NET, w zależności od narzędzi i środowiska.

Niezależnie od wybranego podejścia skonfiguruj następujące zmienne środowiskowe podczas pracy z jednostką usługi:

  • AZURE_CLIENT_ID → wartość identyfikatora aplikacji.
  • AZURE_TENANT_ID → wartość identyfikatora dzierżawy.
  • AZURE_CLIENT_SECRET → hasło/poświadczenia wygenerowane dla aplikacji.

Podczas pracy lokalnie z programem Visual Studio zmienne środowiskowe można ustawić w launchsettings.json pliku w Properties folderze projektu. Po uruchomieniu aplikacji te wartości są pobierane automatycznie. Należy pamiętać, że te konfiguracje nie są przesyłane z aplikacją po jej wdrożeniu, dlatego należy skonfigurować zmienne środowiskowe w docelowym środowisku hostingu.

"profiles": {
    "SampleProject": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:7177;http://localhost:5177",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID":"11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID": "11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    }
  }

5 — Implementowanie wartości domyślnejAzureCredential w aplikacji

DefaultAzureCredential to uporządkowana sekwencja mechanizmów uwierzytelniania w firmie Microsoft Entra. Każdy mechanizm uwierzytelniania jest klasą pochodzącą z klasy TokenCredential i jest nazywana poświadczeniami. W czasie wykonywania DefaultAzureCredential próbuje uwierzytelnić się przy użyciu pierwszego poświadczenia. Jeśli to poświadczenie nie może uzyskać tokenu dostępu, zostanie podjęta próba następnego poświadczenia w sekwencji itd., dopóki token dostępu nie zostanie pomyślnie uzyskany. W ten sposób aplikacja może używać różnych poświadczeń w różnych środowiskach bez konieczności pisania kodu specyficznego dla środowiska.

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

Aby użyć DefaultAzureCredentialpolecenia , dodaj pakiet Azure.Identity i opcjonalnie pakiety Microsoft.Extensions.Azure do aplikacji:

W wybranym terminalu przejdź do katalogu projektu aplikacji i uruchom następujące polecenia:

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

Dostęp do usług platformy Azure jest uzyskiwany przy użyciu wyspecjalizowanych klas klientów z różnych bibliotek klienckich zestawu Azure SDK. Te klasy i własne usługi niestandardowe powinny być zarejestrowane, aby można było uzyskać do nich dostęp za pośrednictwem wstrzykiwania zależności w całej aplikacji. W Program.csprogramie wykonaj następujące kroki, aby zarejestrować klasę klienta i DefaultAzureCredential:

  1. Uwzględnij Azure.Identity przestrzenie nazw i Microsoft.Extensions.Azure za pomocą using dyrektyw.
  2. Zarejestruj klienta usługi platformy Azure przy użyciu odpowiedniej Addmetody rozszerzenia z prefiksem.
  3. Przekaż wystąpienie DefaultAzureCredential metody UseCredential .

Na przykład:

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

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

Alternatywą jest UseCredential utworzenie wystąpienia DefaultAzureCredential bezpośrednio:

using Azure.Identity;

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

Po uruchomieniu poprzedniego kodu na lokalnej stacji roboczej programistycznej w zmiennych środowiskowych dla jednostki usługi aplikacji lub w lokalnie zainstalowanych narzędziach deweloperskich, takich jak Program Visual Studio, dla zestawu poświadczeń dewelopera. Jedną z metod 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.