Freigeben über


Konfigurieren einer Anwendung, um einer verwalteten Identität zu vertrauen

In diesem Artikel wird beschrieben, wie Sie eine Microsoft Entra-Anwendung so konfigurieren, dass sie einer verwalteten Identität vertraut. Anschließend können Sie das verwaltete Identitätstoken für ein Zugriffstoken austauschen, das auf geschützte Microsoft Entra-Ressourcen zugreifen kann, ohne app-Geheime Schlüssel verwenden oder verwalten zu müssen.

Voraussetzungen

Wichtige Überlegungen und Einschränkungen

Zum Erstellen, Aktualisieren oder Löschen von Verbundidentitätsanmeldeinformationen muss das Konto, das die Aktion ausführt, über die Rolle "Anwendungsadministrator", "Anwendungsentwickler", "Cloudanwendungsadministrator" oder "Anwendungsbesitzer" verfügen. Die Berechtigung "microsoft.directory/applications/credentials/update" ist erforderlich, um eine Verbundidentitäts-Anmeldeinformationen zu aktualisieren.

Maximal 20 Verbundidentitätsanmeldeinformationen können einer Anwendung oder einer vom Benutzer zugewiesenen verwalteten Identität hinzugefügt werden.

Beim Konfigurieren von Anmeldeinformationen für eine Verbundidentität müssen mehrere wichtige Informationen angegeben werden:

  • Aussteller, Thema sind die entscheidenden Informationen, die benötigt werden, um die Vertrauensbeziehung aufzubauen. Wenn die Azure-Workload die Microsoft-Identitätsplattform anfordert, das verwaltete Identitätstoken gegen ein Entra-App-Zugriffstoken auszutauschen, werden die Aussteller und Subjektwerte der Verbundidentitätsanmeldeinformationen mit den im verwalteten Identitätstoken bereitgestellten issuer und subject Ansprüchen abgeglichen. Wenn diese Überprüfung erfolgreich ist, stellt Microsoft Identity Platform ein Zugriffstoken für die externe Softwareworkload aus.

  • issuer ist die URL der Autoritäts-URL des Microsoft Entra-Mandanten in der Form https://login.microsoftonline.com/{tenant}/v2.0. Sowohl die Microsoft Entra-App als auch die verwaltete Identität müssen demselben Mandanten angehören. Wenn der issuer-Anspruch führende oder nachfolgende Leerzeichen im Wert enthält, wird der Tokenaustausch blockiert.

  • subject: Hierbei handelt es sich um die groß- und kleinschreibungssensitive GUID der Objekt-ID (Prinzipal) der verwalteten Identität, die der Azure-Workload zugewiesen ist. Die verwaltete Identität muss sich im selben Mandanten wie die App-Registrierung befinden, auch wenn sich die Zielressource in einer anderen Cloud befindet. Die Microsoft Identity Platform lehnt den Tokenaustausch ab, wenn die subject Konfiguration der Verbundidentitätsanmeldeinformationen nicht exakt mit der Prinzipal-ID der verwalteten Identität übereinstimmt.

    Von Bedeutung

    Nur vom Benutzer zugewiesene verwaltete Identitäten können als Verbundanmeldeinformationen für Apps verwendet werden. vom System zugewiesene Identitäten werden nicht unterstützt.

  • Zielgruppen gibt den Wert an, der in dem aud Anspruch im verwalteten Identitätstoken erscheint (erforderlich). Der Wert muss je nach Zielcloud eine der folgenden Werte sein.

    • Globaler Microsoft Entra ID-Dienst: api://AzureADTokenExchange
    • Microsoft Entra ID für die amerikanische Regierung: api://AzureADTokenExchangeUSGov
    • Microsoft Entra China betrieben von 21Vianet: api://AzureADTokenExchangeChina

    Von Bedeutung

    Der Zugriff auf Ressourcen in einem anderen Mandanten wird unterstützt. Der Zugriff auf Ressourcen in einer anderen Cloud wird nicht unterstützt. Tokenanforderungen an andere Clouds schlagen fehl.

    Von Bedeutung

    Wenn Sie versehentlich falsche Informationen im Aussteller, Betreff oder Zielgruppe hinzufügen, wird die Verbundidentitätsanmeldeinformationseinstellung erfolgreich ohne Fehler erstellt. Der Fehler wird erst offensichtlich, wenn der Austausch des Tokens fehlschlägt.

  • Name ist der eindeutige Bezeichner für die Verbundidentitätsanmeldeinformationen. (Erforderlich) Dieses Feld hat eine Zeichenbeschränkung von 3 bis 120 Zeichen und muss url-freundlich sein. Alphanumerische, Strich- oder Unterstrichzeichen werden unterstützt, und das erste Zeichen muss nur alphanumerisch sein. Es ist unveränderlich, sobald es erstellt wurde.

  • beschreibung ist die vom Benutzer bereitgestellte Beschreibung der Verbundidentitätsanmeldeinformationen (optional). Die Beschreibung wird von Microsoft Entra ID weder validiert noch überprüft. Dieses Feld hat einen Grenzwert von 600 Zeichen.

Platzhalterzeichen werden in keinem Eigenschaftswert für Anmeldeinformationen für Verbundidentitäten unterstützt.

Konfigurieren einer Verbundidentitätsanmeldeinformationen für eine Anwendung

In diesem Abschnitt konfigurieren Sie ein Verbundsidentitätsnachweis für eine vorhandene Anwendung, damit sie einer verwalteten Identität vertraut. Verwenden Sie die folgenden Registerkarten, um auszuwählen, wie Sie den Verbundidentitätsnachweis für eine vorhandene Anwendung konfigurieren.

  1. Melden Sie sich beim Microsoft Entra Admin Center an. Überprüfen Sie, ob Sie sich in dem Mandanten befinden, in dem Ihre Anwendung registriert ist.

  2. Navigieren Sie zu Entra ID>, und wählen Sie Ihre Anwendung im Hauptfenster aus.

  3. Wählen Sie unter "Verwalten" die Option "Zertifikate und Geheime Schlüssel" aus.

  4. Wählen Sie die Registerkarte " Verbundanmeldeinformationen" und dann "Anmeldeinformationen hinzufügen" aus.

    Screenshot des Bereichs

  5. Wählen Sie im Dropdownmenü für das Szenario "Verbundanmeldeinformationen" die Option "Verwaltete Identität" aus und füllen Sie die Werte gemäß der folgenden Tabelle aus.

    Feld BESCHREIBUNG Beispiel
    Emittent Die OAuth 2.0 / OIDC-Aussteller-URL der Microsoft Entra ID-Autorität, die das verwaltete Identitätstoken ausgibt. Dieser Wert wird automatisch mit dem aktuellen Entra-Mandantenaussteller ausgefüllt. https://login.microsoftonline.com/{tenantID}/v2.0
    Verwaltete Identität auswählen Klicken Sie auf diesen Link, um die verwaltete Identität auszuwählen, die als Verbundidentität fungiert. Sie können nur User-Assigned Managed Identities als Anmeldeinformationen verwenden. msi-webapp1
    Beschreibung (Optional) Eine vom Benutzer bereitgestellte Beschreibung der Verbundidentitätsanmeldeinformationen. Vertrauen Sie UAMI-Workloads als Zugangsdaten für meine App.
    Publikum Der Zielgruppenwert, der im externen Token angezeigt werden muss. Muss auf einen der folgenden Werte festgelegt werden:
    Globaler Entra ID-Dienst: api://AzureADTokenExchange
    Entra ID für US-Regierung: api://AzureADTokenExchangeUSGov
    Entra ID China betrieben von 21Vianet: api://AzureADTokenExchangeChina

    Screenshot des Anmeldeinformationsfensters im Microsoft Entra Admin Center.

Aktualisieren Des Anwendungscodes zum Anfordern eines Zugriffstokens

Die folgenden Codeausschnitte veranschaulichen, wie ein verwaltetes Identitätstoken abgerufen und als Anmeldeinformationen für Ihre Entra-Anwendung verwendet wird. Die Beispiele sind in beiden Fällen gültig, in denen die Zielressource im selben Mandanten wie die Entra-Anwendung oder in einem anderen Mandanten vorhanden ist.

Azure Identity-Clientbibliotheken

Die folgenden Codebeispiele veranschaulichen den Zugriff auf einen geheimen Azure Key Vault-Schlüssel, können jedoch angepasst werden, um auf jede Ressource zuzugreifen, die von Microsoft Entra geschützt ist.

using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

// Audience value must be one of the below values depending on the target cloud:
// - Entra ID Global cloud: api://AzureADTokenExchange
// - Entra ID US Government: api://AzureADTokenExchangeUSGov
// - Entra ID China operated by 21Vianet: api://AzureADTokenExchangeChina
string miAudience = "api://AzureADTokenExchange";

// Create an assertion with the managed identity access token, so that it can be
// exchanged for an app token. Client ID is passed here. Alternatively, either
// object ID or resource ID can be passed.
ManagedIdentityCredential miCredential = new(
    ManagedIdentityId.FromUserAssignedClientId("<YOUR_MI_CLIENT_ID>"));
TokenRequestContext tokenRequestContext = new([$"{miAudience}/.default"]);
ClientAssertionCredential clientAssertionCredential = new(
    "<YOUR_RESOURCE_TENANT_ID>",
    "<YOUR_APP_CLIENT_ID>",
    async _ =>
        (await miCredential
            .GetTokenAsync(tokenRequestContext)
            .ConfigureAwait(false)).Token
);

// Create a new SecretClient using the assertion
SecretClient client = new(
    new Uri("https://testfickv.vault.azure.net/"), 
    clientAssertionCredential);

// Retrieve the secret
KeyVaultSecret secret = client.GetSecret("<SECRET_NAME>");

Microsoft.Identity.Web

In Microsoft.Identity.Web können Sie den ClientCredentials-Abschnitt in Ihrer appsettings.json so festlegen, dass Ihr Code SignedAssertionFromManagedIdentity verwendet, um die konfigurierte verwaltete Identität als Anmeldeinformationen zu nutzen:

{
  "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/.default"
      }
    ]
  }
}

MSAL (.NET)

In MSAL können Sie die ManagedClientApplication-Klasse verwenden, um ein verwaltetes Identitätstoken abzurufen. Dieses Token kann dann beim Erstellen einer vertraulichen Clientanwendung als Client assertion verwendet werden.

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

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/.default";

      // 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 containerClient = 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}");
        }
    }
}

Siehe auch