Udostępnij za pośrednictwem


Konfigurowanie aplikacji do uznania tożsamości zarządzanej (wersja zapoznawcza)

W tym artykule opisano, jak skonfigurować aplikację Microsoft Entra, aby ufać tożsamości zarządzanej. Następnie możesz wymienić token tożsamości zarządzanej na token dostępu, który może uzyskiwać dostęp do chronionych zasobów Microsoft Entra bez konieczności używania ani zarządzania wpisami tajnych aplikacji.

Warunki wstępne

Ważne zagadnienia i ograniczenia

Aby utworzyć, zaktualizować lub usunąć poświadczenie tożsamości federacyjnej, konto wykonujące akcję musi mieć rolę administratora aplikacji , dewelopera aplikacji , administratora aplikacji w chmurze lub właściciela aplikacji. Uprawnienie microsoft.directory/applications/credentials/update jest wymagane do zaktualizowania poświadczeń tożsamości federacyjnej.

Do aplikacji lub tożsamości zarządzanej przypisanej przez użytkownika można dodać maksymalnie 20 poświadczeń tożsamości federacyjnej.

Podczas konfigurowania poświadczeń tożsamości federacyjnej należy podać kilka ważnych informacji:

  • wystawcy i podmiotu są kluczowymi informacjami potrzebnymi do skonfigurowania relacji zaufania. Kombinacja issuer i subject musi być unikatowa w aplikacji. Gdy obciążenie platformy Azure żąda od platformy tożsamości firmy Microsoft wymiany tokenu tożsamości zarządzanej na token dostępu, wartości wystawcy i wartości podmiotu poświadczeń tożsamości federacyjnej są sprawdzane względem oświadczeń issuer i subject podanych w tokenie tożsamości zarządzanej. Jeśli sprawdzanie poprawności zakończy się pomyślnie, platforma tożsamości firmy Microsoft wystawia token dostępu do zewnętrznego obciążenia oprogramowania.

  • wystawca jest adresem URL strony autorytetu Microsoft Entra w formacie https://login.microsoftonline.com/{tenant}/v2.0. Aplikacja Microsoft Entra i tożsamość zarządzana muszą należeć do tego samego dzierżawcy. Jeśli oświadczenie issuer ma wiodące lub końcowe spacje w jego wartości, wymiana tokenów zostanie zablokowana.

    Ważny

    Mimo że rejestracja aplikacji i tożsamość zarządzana muszą znajdować się w tej samej dzierżawie, jednostka usługi rejestracji aplikacji nadal może zrealizować token tożsamości zarządzanej.

  • Temat to identyfikator GUID, który jest identyfikatorem obiektu tożsamości zarządzanej (Principal ID) przypisanym do obciążenia Azure. Platforma tożsamości firmy Microsoft analizuje przychodzący token zewnętrzny i odrzuca wymianę tokenu dostępu, jeśli pole podmiotu skonfigurowane w poświadczeniu tożsamości federacyjnej nie jest zgodne z identyfikatorem podmiotu tożsamości zarządzanej. W identyfikatorze GUID jest rozróżniana wielkość liter.

  • Ważny

    W tej funkcji można używać tylko tożsamości zarządzanych User-Assigned.

  • *lista odbiorców wyświetla grupy docelowe, które mogą pojawić się w zewnętrznym tokenie (wymagane). Musisz dodać pojedynczą wartość odbiorców, która ma limit 600 znaków. Wartość musi należeć do jednej z poniższych i musi odpowiadać wartości oświadczenia aud w tokenie tożsamości zarządzanej.

    • chmura publiczna: api://AzureADTokenExchange
    • Fairfax: api://AzureADTokenExchangeUSGov
    • Mooncake: api://AzureADTokenExchangeChina
    • USNat: api://AzureADTokenExchangeUSNat
    • USSec: api://AzureADTokenExchangeUSSec

    Ważny

    Jeśli przypadkowo dodasz nieprawidłowe informacje w wystawcy, podmiocie lub odbiorcach, poświadczenie tożsamości federacyjnej zostanie utworzone pomyślnie i bez błędu. Błąd nie jest widoczny, dopóki wymiana tokenów nie powiedzie się.

  • nazwa jest unikatowym identyfikatorem poświadczeń tożsamości federacyjnej. (Wymagane) To pole ma limit znaków od 3 do 120 znaków i musi być przyjazny dla adresu URL. Obsługiwane są znaki alfanumeryczne, kreskowe lub podkreślenia, a pierwszy znak musi być tylko alfanumeryczny. Jest niezmienny po utworzeniu.

  • opis to podany przez użytkownika opis poświadczeń tożsamości federacyjnej (opcjonalnie). Opis nie jest weryfikowany ani sprawdzany przez identyfikator Entra firmy Microsoft. To pole ma limit 600 znaków.

Symbole wieloznaczne nie są obsługiwane w żadnej wartości właściwości poświadczeń tożsamości federacyjnej.

Pobierz identyfikator obiektu tożsamości zarządzanej

  1. Zaloguj się na Azure Portal.
  2. W polu wyszukiwania wprowadź Zarządzane tożsamości. W obszarze Serviceswybierz Tożsamości zarządzane.
  3. W ramach wymagań wstępnych wyszukaj i wybierz zarządzaną tożsamość przypisaną przez użytkownika, którą utworzyłeś.
  4. W okienku Przegląd skopiuj wartość identyfikatora obiektu (podmiotu zabezpieczeń). Ta wartość jest używana jako pole podmiotu w konfiguracji poświadczeń federacyjnych.

Zrzut ekranu przedstawiający tożsamość zarządzaną przypisaną przez użytkownika w witrynie Azure Portal. Identyfikator obiektu jest wyróżniony, który będzie używany jako pole *podmiot* w konfiguracji poświadczeń federacyjnych.

Konfigurowanie poświadczenia tożsamości federacyjnej w istniejącej aplikacji

W tej sekcji skonfigurujesz poświadczenie tożsamości federacyjnej w istniejącej aplikacji w celu zaufania tożsamości zarządzanej. Użyj poniższych zakładek, aby wybrać, jak skonfigurować poświadczenia tożsamości federacyjnej w istniejącej aplikacji.

  1. Zaloguj się do centrum administracyjnego Microsoft Entra. Sprawdź, czy jesteś w dzierżawie, w której zarejestrowano aplikację.

  2. Przejdź do Identity>Applications>App registrations, a następnie wybierz aplikację w oknie głównym.

  3. W obszarze Zarządzajwybierz pozycję certyfikaty & sekrety.

  4. Wybierz kartę Poświadczenia federacyjne i wybierz pozycję Dodaj poświadczenie.

    Zrzut ekranu przedstawiający okienko certyfikatów i tajemnic w centrum administracyjnym Microsoft Entra z wyróżnioną kartą poświadczeń federacyjnych.

  5. Z listy rozwijanej scenariusza poświadczeń federacyjnych wybierz pozycję Inny wystawca i wypełnij wartości zgodnie z poniższą tabelą:

    Pole Opis Przykład
    Emitenta Adres URL wystawcy OAuth 2.0 / OIDC autorytetu Microsoft Entra ID. https://login.microsoftonline.com/{tenantID}/v2.0
    Identyfikator podmiotu Identyfikator GUID tożsamości zarządzanej Principal ID. aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
    Nazwa Unikatowa opisowa nazwa poświadczenia. msi-webapp1
    Opis (opcjonalnie) Opis poświadczenia tożsamości federacyjnej dostarczony przez użytkownika. ufaj obciążeniom UAMI, aby personifikować aplikacji
    Audiencja Wartość docelowej grupy odbiorców, która musi wystąpić w tokenie zewnętrznym. chmury publicznej: api://AzureADTokenExchange
    Fairfax: api://AzureADTokenExchangeUSGov
    Mooncake: api://AzureADTokenExchangeChina
    USNat: api://AzureADTokenExchangeUSNat
    USSec: api://AzureADTokenExchangeUSSec

    Zrzut ekranu przedstawiający okno poświadczeń w centrum administracyjnym firmy Microsoft Entra.

Aktualizowanie kodu aplikacji w celu żądania tokenu dostępu

Poniższe przykłady kodu w poniższej tabeli przedstawiają przepływy poświadczeń klienta "usługa do usługi". Jednak zarządzane tożsamości jako poświadczenia domyślne mogą być używane w innych przepływach uwierzytelniania, takich jak przepływy OBO (On-Behalf-Of). Przykłady są prawidłowe w obu przypadkach, gdy zasoby są w tej samej dzierżawie co rejestracja aplikacji i tożsamość zarządzana albo w innej dzierżawie.

Azure.Identity

W poniższym przykładzie pokazano, jak nawiązać połączenie z kontenerem usługi Azure Storage przy użyciu Azure.Identity, ale można go dostosować w celu uzyskania dostępu do dowolnego zasobu chronionego przez firmę Microsoft Entra. Przykłady są prawidłowe w obu przypadkach, gdy dzierżawca zasobów znajduje się w tej samej dzierżawie co rejestracja aplikacji i tożsamość zarządzana, lub gdy są one w innej dzierżawie.

using Azure.Identity;
using Azure.Storage.Blobs;

internal class Program
{
    // This example demonstrates how to access an Azure blob storage account by utilizing the manage identity credential.
  static void Main(string[] args)
  {
        string storageAccountName = "YOUR_STORAGE_ACCOUNT_NAME";
        string containerName = "CONTAINER_NAME";
        
        // The application must be granted access on the target resource
      string appClientId = "YOUR_APP_CLIENT_ID";

        // The tenant where the target resource is created, in this example, the storage account tenant
        // If the resource tenant different from the app tenant, your app needs to be 
      string resourceTenantId = "YOUR_RESOURCE_TENANT_ID";

        // The managed identity which you configured as a Federated Identity Credential (FIC)
      string miClientId = "YOUR_MANAGED_IDENTITY_CLIENT_ID"; 

        // Audience value must be one of the below values depending on the target cloud.
        // Public cloud: api://AzureADTokenExchange
        //  Fairfax: api://AzureADTokenExchangeUSGov
        //  Mooncake: api://AzureADTokenExchangeChina
        //  USNat: api://AzureADTokenExchangeUSNat
        //  USSec: api://AzureADTokenExchangeUSSec
      string audience = "api://AzureADTokenExchange";

        // 1. Create an assertion with the managed identity access token, so that it can be exchanged an app token
        var miCredential = new ManagedIdentityCredential(managedIdentityClientId);
        ClientAssertionCredential assertion = new(
            tenantId,
            appClientId,
            async (token) =>
            {
                // fetch Managed Identity token for the specified audience
                var tokenRequestContext = new Azure.Core.TokenRequestContext(new[] { $"{audience}/.default" });
                var accessToken = await miCredential.GetTokenAsync(tokenRequestContext).ConfigureAwait(false);
                return accessToken.Token;
            });

        // 2. The assertion can be used to obtain an App token (taken care of by the SDK)
        var containerClient  = new BlobContainerClient(new Uri($"https://{storageAccountName}.blob.core.windows.net/{containerName}"), assertion);

        await foreach (BlobItem blob in containerClient.GetBlobsAsync())
        {
            // TODO: perform operations with the blobs
            BlobClient blobClient = containerClient.GetBlobClient(blob.Name);
            Console.WriteLine($"Blob name: {blobClent.Name}, uri: {blobClient.Uri}");            
        }
  }
}

Microsoft.Identity.Web

W Microsoft.Identity.Webaplikacja internetowa lub internetowy interfejs API może zastąpić certyfikat klienta podpisaną asercją klienta na potrzeby uwierzytelniania. W aplikacji możesz zaktualizować sekcję ClientCredentials w appsettings.json do następującej konfiguracji:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "YOUR_APPLICATION_ID",
    "TenantId": "YOUR_TENANT_ID",

   "ClientCredentials": [
      {
        "SourceType": "SignedAssertionFromManagedIdentity",
        "ManagedIdentityClientId": "YOUR_USER_ASSIGNED_MANAGED_IDENTITY_CLIENT_ID",
        "TokenExchangeUrl":"api://AzureADTokenExchange"
      }
   ]
  }
}

MSAL (.NET)

W biblioteki MSAL można użyć klasy ManagedClientApplication w celu uzyskania tokenu tożsamości zarządzanej. Ten token może być następnie używany jako asercja klienta podczas konstruowania poufnej aplikacji klienckiej.

Ostrzeżenie

W przypadku aplikacji platformy .NET zdecydowanie zalecamy używanie bibliotek wyższego poziomu opartych na bibliotece MSAL, takich jak Microsoft.Identity.Web lub Azure.Identity.

using Microsoft.Identity.Client;
using Azure.Storage.Blobs;
using Azure.Core;

internal class Program
{
  static async Task Main(string[] args)
  {
        string storageAccountName = "YOUR_STORAGE_ACCOUNT_NAME";
        string containerName = "CONTAINER_NAME";

      string appClientId = "YOUR_APP_CLIENT_ID";
      string resourceTenantId = "YOUR_RESOURCE_TENANT_ID";
      Uri authorityUri = new($"https://login.microsoftonline.com/{resourceTenantId}");
      string miClientId = "YOUR_MI_CLIENT_ID";
      string audience = "api://AzureADTokenExchange";

      // Get mi token to use as assertion
      var miAssertionProvider = async (AssertionRequestOptions _) =>
      {
            var miApplication = ManagedIdentityApplicationBuilder
                .Create(ManagedIdentityId.WithUserAssignedClientId(miClientId))
                .Build();

            var miResult = await miApplication.AcquireTokenForManagedIdentity(audience)
                .ExecuteAsync()
                .ConfigureAwait(false);
            return miResult.AccessToken;
      };

      // Create a confidential client application with the assertion.
      IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(appClientId)
        .WithAuthority(authorityUri, false)
        .WithClientAssertion(miAssertionProvider)
        .WithCacheOptions(CacheOptions.EnableSharedCacheOptions)
        .Build();

        // Get the federated app token for the storage account
      string[] scopes = [$"https://{storageAccountName}.blob.core.windows.net/.default"];
      AuthenticationResult result = await app.AcquireTokenForClient(scopes).ExecuteAsync().ConfigureAwait(false);

        TokenCredential tokenCredential = new AccessTokenCredential(result.AccessToken);
        var client = new BlobContainerClient(
            new Uri($"https://{storageAccountName}.blob.core.windows.net/{containerName}"),
            tokenCredential);

        await foreach (BlobItem blob in containerClient.GetBlobsAsync())
        {
            // TODO: perform operations with the blobs
            BlobClient blobClient = containerClient.GetBlobClient(blob.Name);
            Console.WriteLine($"Blob name: {blobClient.Name}, URI: {blobClient.Uri}");
        }
  }
}

Zobacz też