Udostępnij za pośrednictwem


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

Podczas programowania lokalnego aplikacje muszą uwierzytelniać się na platformie Azure, aby uzyskać dostęp do różnych usług platformy Azure. Dwa typowe podejścia do uwierzytelniania lokalnego to użycie konta dewelopera lub jednostki usługi. W tym artykule wyjaśniono, jak używać konta głównego usługi aplikacji. W poniższych sekcjach nauczysz się:

  • Jak zarejestrować aplikację w usłudze Microsoft Entra w celu utworzenia głównego użytkownika usługi
  • Jak efektywnie zarządzać uprawnieniami za pomocą grup entra firmy Microsoft
  • Jak przypisać role do uprawnień w obrębie zakresu
  • Jak uwierzytelniać się przy użyciu jednostki usługi w kodzie aplikacji

Podczas używania dedykowanych kont aplikacji można przestrzegać zasady minimalnych uprawnień podczas uzyskiwania dostępu do zasobów platformy Azure. Uprawnienia są ograniczone do określonych wymagań aplikacji podczas programowania, uniemożliwiając przypadkowy dostęp do zasobów platformy Azure przeznaczonych dla innych aplikacji lub usług. Takie podejście pomaga również uniknąć problemów, gdy aplikacja zostanie przeniesiona do środowiska produkcyjnego, zapewniając, że nie jest ona nadmiernie uprzywilejowana w środowisku deweloperskim.

Diagram pokazuje, w jaki sposób lokalna aplikacja .NET używa poświadczeń dewelopera do łączenia się z platformą Azure za pomocą lokalnie zainstalowanych narzędzi programistycznych.

Po zarejestrowaniu aplikacji na platformie Azure zostanie utworzona jednostka usługi aplikacji. Do lokalnego rozwoju:

  • Utwórz oddzielną rejestrację aplikacji dla każdego dewelopera pracującego nad aplikacją, aby upewnić się, że każdy deweloper ma własną jednostkę usługi aplikacji, unikając konieczności udostępniania poświadczeń.
  • Utwórz oddzielną rejestrację aplikacji dla każdej aplikacji, aby ograniczyć uprawnienia aplikacji tylko do tego, co jest niezbędne.

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, aby uwierzytelnić aplikację w wymaganych zasobach platformy Azure.

Rejestrowanie aplikacji na platformie Azure

Obiekty głównej usługi aplikacji są tworzone za pośrednictwem rejestracji aplikacji na platformie Azure przy użyciu portalu Azure lub Azure CLI.

  1. W portalu Azure użyj paska wyszukiwania, aby przejść do strony Rejestracje aplikacji.

  2. Na stronie Rejestracje aplikacji wybierz opcję + Nowa rejestracja.

  3. Na stronie Rejestrowanie aplikacji:

    • W polu Nazwa wprowadź opisową wartość zawierającą nazwę aplikacji i środowisko docelowe.
    • W przypadku obsługiwanych typów kont wybierz Konta wyłącznie w tym katalogu organizacyjnym (tylko klient firmy Microsoft — pojedyncza dzierżawa)lub dowolną opcję najlepiej dopasowaną do Twoich wymagań.
  4. Wybierz pozycję Zarejestruj, aby zarejestrować aplikację i utworzyć jednostkę usługi.

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

  5. Na stronie rejestracji aplikacji skopiuj identyfikator aplikacji (klienta) i identyfikator katalogu (dzierżawy) i wklej je w tymczasowe miejsce do późniejszego użycia w konfiguracjach kodu aplikacji.

  6. Wybierz pozycję Dodaj certyfikat lub klucz tajny, aby skonfigurować poświadczenia dla aplikacji.

  7. Na stronie Certyfikaty i sekrety wybierz Nowy tajny klucz klienta.

  8. W panelu wysuwanym Dodaj tajny klienta, który jest już otwarty:

    • W polu Opis wprowadź wartość Current.
    • Dla wartości Wygasa pozostaw domyślną zalecaną wartość 180 dni.
    • Wybierz Dodaj, aby dodać sekret.
  9. Na stronie sekretów & skopiuj właściwość wartość sekretu klienta do użycia w przyszłym kroku.

    Notatka

    Wartość tajnego klucza klienta jest wyświetlana tylko raz po zarejestrowaniu aplikacji. Możesz dodać więcej tajnych kluczy klienta bez unieważnienia tego tajnego klucza klienta, ale ponowne wyświetlenie tej wartości nie jest możliwe.

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 opcję 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 zawierającej odwołanie do nazwy aplikacji lub środowiska.
    • opis grupy: wprowadź opis wyjaśniający cel 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 na dole panelu, aby potwierdzić swój wybór.

  7. Wybierz pozycję Utwórz u dołu 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 portalu Azure przejdź do strony Przegląd grupy zasobów zawierającej Twoją aplikację.

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

  3. Na stronie kontroli dostępu (IAM) wybierz pozycję + Dodaj, a następnie wybierz pozycję Dodaj przypisanie roli z rozwijanego menu. Strona Dodawania ról zawiera kilka zakładek 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:

    • Dla wartości Przypisz dostęp do wybierz użytkownik, grupa lub jednostka usługi .
    • Dla wartości członkowie wybierz pozycję + Wybierz członków, aby otworzyć panel wysuwany Wybierz 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 i przypisz w dolnej części karty Członków.

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

  6. Na zakładce Przeglądanie i przypisywanie wybierz pozycję Przeglądanie i przypisywanie na dole strony.

Ustawianie zmiennych środowiskowych aplikacji

W czasie wykonywania niektóre poświadczenia z biblioteki Azure Identity, takie jak DefaultAzureCredential, EnvironmentCredentiali ClientSecretCredential, wyszukują informacje o tożsamości usługi zgodnie z konwencją w 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 dla jednostki usługi:

  • AZURE_CLIENT_ID: służy do identyfikowania zarejestrowanej aplikacji na platformie Azure.
  • AZURE_TENANT_ID: identyfikator dzierżawcy Microsoft Entra.
  • AZURE_CLIENT_SECRET: Tajne poświadczenie wygenerowane dla aplikacji.

W programie Visual Studio zmienne środowiskowe można ustawić w pliku launchsettings.json w folderze Properties projektu. Te wartości są pobierane automatycznie po uruchomieniu aplikacji. Jednak te konfiguracje nie są przesyłane z aplikacją podczas wdrażania, 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": "<your-client-id>",
        "AZURE_TENANT_ID":"<your-tenant-id>",
        "AZURE_CLIENT_SECRET": "<your-client-secret>"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "<your-client-id>",
        "AZURE_TENANT_ID":"<your-tenant-id>",
        "AZURE_CLIENT_SECRET": "<your-client-secret>"
      }
    }
  }

Uwierzytelnianie w usługach platformy Azure z aplikacji

Biblioteka Azure Identity udostępnia różne poświadczenia— implementacje TokenCredential są dostosowane do obsługi różnych scenariuszy i przepływów uwierzytelniania firmy Microsoft Entra. Poniższe kroki pokazują, jak używać ClientSecretCredential podczas pracy z jednostkami usług lokalnie i w środowisku produkcyjnym.

Implementowanie kodu

Dodaj pakiet Azure.Identity. W projekcie ASP.NET Core zainstaluj również pakiet Microsoft.Extensions.Azure:

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 do wstrzykiwania zależności, aby mogły być używane w całej aplikacji. W Program.cswykonaj następujące kroki, aby skonfigurować klasę klienta na potrzeby wstrzykiwania zależności i uwierzytelniania opartego na tokenach:

  1. Dodaj Azure.Identity i Microsoft.Extensions.Azure przestrzenie nazw za pomocą dyrektyw using.
  2. Zarejestruj klienta usługi platformy Azure, używając odpowiedniej metody rozszerzenia z prefiksem Add.
  3. Skonfiguruj ClientSecretCredential przy użyciu tenantId, clientIdi clientSecret.
  4. Przekaż wystąpienie ClientSecretCredential do metody UseCredential.
builder.Services.AddAzureClients(clientBuilder =>
{
    var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
    var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
    var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");

    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));

    clientBuilder.UseCredential(new ClientSecretCredential(tenantId, clientId, clientSecret));
});

Alternatywą dla metody UseCredential jest bezpośrednie podanie poświadczenia klientowi usługi.

var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");

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