Uwierzytelnianie w zasobach platformy Azure z aplikacji platformy .NET hostowanych lokalnie
Artykuł
Aplikacje hostowane poza platformą Azure (na przykład lokalnie lub w centrum danych innej firmy) powinny używać jednostki usługi aplikacji do uwierzytelniania na platformie Azure podczas uzyskiwania dostępu do zasobów platformy Azure. Obiekty jednostki usługi aplikacji są tworzone przy użyciu procesu rejestracji aplikacji na platformie Azure. Po utworzeniu jednostki usługi aplikacji zostanie wygenerowany identyfikator klienta i klucz tajny klienta dla aplikacji. Identyfikator klienta, klucz tajny klienta i identyfikator dzierżawy są następnie przechowywane w zmiennych środowiskowych, dzięki czemu mogą być używane przez zestaw Azure SDK dla platformy .NET do uwierzytelniania aplikacji na platformie Azure w czasie wykonywania.
Dla każdego środowiska hostowanego w aplikacji należy utworzyć inną rejestrację aplikacji. Umożliwia to skonfigurowanie uprawnień określonych zasobów środowiska dla każdej jednostki usługi i upewnienie się, że aplikacja wdrożona w jednym środowisku nie rozmawia z zasobami platformy Azure, które są częścią innego środowiska.
1 — Rejestrowanie aplikacji na platformie Azure
Aplikację można zarejestrować na platformie Azure 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:
Wprowadź rejestracje aplikacji na pasku wyszukiwania w górnej części witryny Azure Portal.
Wybierz element z etykietą Rejestracje aplikacji pod nagłówkiem Usługi w menu wyświetlanym poniżej paska wyszukiwania.
Na stronie Rejestracje aplikacji wybierz pozycję + Nowa rejestracja.
Na stronie Rejestrowanie aplikacji wypełnij formularz w następujący sposób.
Nazwa → wprowadź nazwę rejestracji aplikacji na platformie Azure. Zaleca się, aby ta nazwa zawierała nazwę aplikacji i środowisko (test, prod), dla których jest włączona rejestracja aplikacji.
Obsługiwane typy kont → Konta tylko w tym katalogu organizacyjnym.
Wybierz pozycję Zarejestruj, aby zarejestrować aplikację i utworzyć jednostkę usługi aplikacji.
Na stronie Rejestracja aplikacji dla aplikacji:
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.
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, która będzie również potrzebna w przyszłym kroku.
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.
Na stronie Certyfikaty i wpisy tajne wybierz pozycję + Nowy klucz tajny klienta.
W oknie dialogowym Dodawanie wpisu tajnego klienta zostanie wyświetlone okno dialogowe po prawej stronie. W tym oknie dialogowym:
Opis → Wprowadź wartość Current.
Wygasa → wybierz wartość 24 miesięcy.
Wybierz pozycję Dodaj , aby dodać wpis tajny.
WAŻNE: Ustaw przypomnienie w kalendarzu przed datą wygaśnięcia wpisu tajnego. Dzięki temu możesz dodać nowy wpis tajny przed wygaśnięciem tego wpisu tajnego i zaktualizować aplikacje przed wygaśnięciem tego wpisu tajnego i uniknąć przerw w działaniu usługi w 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.
az ad sp create-for-rbac --name <app-name>
Dane wyjściowe polecenia będą podobne do poniższych. Zanotuj te wartości lub pozostaw to okno otwarte, ponieważ te wartości będą potrzebne w następnym kroku i nie będzie można ponownie wyświetlić wartości hasła (klucza tajnego klienta).
2 — Przypisywanie ról do jednostki usługi aplikacji
Następnie należy określić, jakich ról (uprawnień) potrzebuje twoja aplikacja na temat zasobów i przypisać te role do aplikacji. Role mogą być przypisywane do roli w zakresie zasobu, grupy zasobów lub subskrypcji. W tym przykładzie pokazano, jak przypisać role dla jednostki usługi w zakresie grupy zasobów, ponieważ większość aplikacji grupuje wszystkie zasoby platformy Azure w jedną grupę zasobów.
Znajdź grupę zasobów dla 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.
Na stronie grupy zasobów wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) z menu po lewej stronie.
Na stronie Kontrola dostępu (Zarządzanie dostępem i tożsamościami):
Wybierz kartę Przypisania roli.
Wybierz pozycję + Dodaj z górnego menu, a następnie pozycję Dodaj przypisanie roli z wyświetlonego menu rozwijanego.
Strona Dodawanie przypisania roli zawiera listę wszystkich ról, które można przypisać dla grupy zasobów.
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.
Wybierz rolę, którą chcesz przypisać.
Wybierz przycisk Dalej , aby przejść do następnego ekranu.
Następna strona Dodawanie przypisania roli umożliwia określenie, do którego użytkownika ma zostać przypisana rola.
Wybierz pozycję Użytkownik, grupa lub jednostka usługi w obszarze Przypisz dostęp do.
Wybierz pozycję + Wybierz członków w obszarze Członkowie
Zostanie otwarte okno dialogowe po prawej stronie witryny Azure Portal.
W oknie dialogowym Wybieranie członków:
Pole tekstowe Wybierz może służyć do filtrowania listy użytkowników i grup w ramach subskrypcji. W razie potrzeby wpisz pierwsze kilka znaków jednostki usługi utworzonej dla aplikacji, aby przefiltrować listę.
Wybierz jednostkę usługi skojarzona z aplikacją.
Wybierz pozycję Wybierz w dolnej części okna dialogowego, aby kontynuować.
Jednostka usługi będzie teraz 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.
az role definition list \
--query "sort_by([].{roleName:roleName, description:description}, &roleName)" \
--output table
Aby na przykład zezwolić jednostce usługi z identyfikatorem appId 00000000-0000-0000-0000-000000000000 odczytu, zapisu i usuwania dostępu do kontenerów obiektów blob usługi Azure Storage i danych do wszystkich kont magazynu w grupie zasobów msdocs-dotnet-sdk-auth-example , należy przypisać jednostkę usługi aplikacji do roli Współautor danych obiektu blob usługi Storage przy użyciu następującego polecenia.
az role assignment create --assignee "00000000-0000-0000-0000-000000000000" \
--role "Storage Blob Data Contributor" \
--resource-group "msdocs-dotnet-sdk-auth-example"
3 — Konfigurowanie zmiennych środowiskowych dla aplikacji
Obiekt DefaultAzureCredential będzie szukać poświadczeń jednostki usługi w zestawie zmiennych środowiskowych w czasie wykonywania. 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 należy skonfigurować 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.
Jeśli aplikacja jest hostowana w usługach IIS, zaleca się ustawienie zmiennych środowiskowych dla puli aplikacji w celu odizolowania ustawień między aplikacjami.
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_ID',value='00000000-0000-0000-0000-000000000000']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_TENANT_ID',value='11111111-1111-1111-1111-111111111111']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_SECRET',value='=abcdefghijklmnopqrstuvwxyz']" /commit:apphost
Te ustawienia można również skonfigurować bezpośrednio przy użyciu applicationPools elementu wewnątrz applicationHost.config pliku.
Zmienne środowiskowe systemu Windows można ustawić z poziomu wiersza polecenia. Jednak w przypadku korzystania z tego podejścia wartości są dostępne dla wszystkich aplikacji działających w tym systemie operacyjnym i mogą powodować konflikty, jeśli nie jesteś ostrożny. Zmienne środowiskowe można ustawić na poziomie użytkownika lub systemu.
# Set user environment variables
setx ASPNETCORE_ENVIRONMENT "Development"
setx AZURE_CLIENT_ID "00000000-0000-0000-0000-000000000000"
setx AZURE_TENANT_ID "11111111-1111-1111-1111-111111111111"
setx AZURE_CLIENT_SECRET "=abcdefghijklmnopqrstuvwxyz"
# Set system environment variables - requires running as admin
setx ASPNETCORE_ENVIRONMENT "Development"
setx AZURE_CLIENT_ID "00000000-0000-0000-0000-000000000000" /m
setx AZURE_TENANT_ID "11111111-1111-1111-1111-111111111111" /m
setx AZURE_CLIENT_SECRET "=abcdefghijklmnopqrstuvwxyz" /m
Możesz również użyć programu PowerShell, aby ustawić zmienne środowiskowe na poziomie użytkownika lub komputera.
# Set user environment variables
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "User")
[Environment]::SetEnvironmentVariable("AZURE_CLIENT_ID", "00000000-0000-0000-0000-000000000000", "User")
[Environment]::SetEnvironmentVariable("AZURE_TENANT_ID", "11111111-1111-1111-1111-111111111111", "User")
[Environment]::SetEnvironmentVariable("AZURE_CLIENT_SECRET", "=abcdefghijklmnopqrstuvwxyz", "User")
# Set system environment variables - requires running as admin
[Environment]::SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "Development", "Machine")
[Environment]::SetEnvironmentVariable("AZURE_CLIENT_ID", "00000000-0000-0000-0000-000000000000", "Machine")
[Environment]::SetEnvironmentVariable("AZURE_TENANT_ID", "11111111-1111-1111-1111-111111111111", "Machine")
[Environment]::SetEnvironmentVariable("AZURE_CLIENT_SECRET", "=abcdefghijklmnopqrstuvwxyz", "Machine")
4 — Implementowanie wartości domyślnejAzureCredential 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.
Kliknij prawym przyciskiem myszy węzeł projektu w programie Visual Studio i wybierz polecenie Zarządzaj pakietami NuGet. Wyszukaj ciąg Azure.Identity w polu wyszukiwania i zainstaluj pasujący pakiet. Powtórz ten proces również dla pakietu 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.
Uwzględnij Azure.Identity przestrzenie nazw i Microsoft.Extensions.Azure z instrukcją using.
Zarejestruj usługę platformy Azure przy użyciu odpowiednich metod pomocnika.
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.
Współpracuj z nami w serwisie GitHub
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź: https://aka.ms/ContentUserFeedback.