Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- Ein Azure-Konto mit einem aktiven Abonnement. Erstellen Sie kostenlos ein Konto.
- Dieses Azure-Konto muss über Berechtigungen zum Aktualisieren von Anwendungsanmeldeinformationen verfügen. Alle folgenden Microsoft Entra-Rollen enthalten die erforderlichen Berechtigungen:
- Ein Verständnis der Konzepte in verwalteten Identitäten für Azure-Ressourcen.
- Eine vom Benutzer zugewiesene verwaltete Identität , die der Azure-Computeressource (z. B. einem virtuellen Computer oder Azure App Service) zugewiesen ist, der Ihre Workload hosten soll.
- Eine App-Registrierung in der Microsoft Entra-ID. Diese App-Registrierung muss demselben Mandanten wie die verwaltete Identität angehören.
- Wenn Sie auf Ressourcen in einem anderen Mandanten zugreifen müssen, muss Ihre App-Registrierung eine mehrinstanzenfähige Anwendung sein und in den anderen Mandanten bereitgestellt werden. Erfahren Sie , wie Sie eine mehrinstanzenfähige App in anderen Mandanten hinzufügen.
- Die App-Registrierung muss Zugriff auf geschützte Microsoft Entra-Ressourcen haben (z. B. Azure, Microsoft Graph, Microsoft 365 usw.). Dieser Zugriff kann über API-Berechtigungen oder delegierte Berechtigungen gewährt werden.
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
undsubject
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 derissuer
-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 diesubject
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.
-
Globaler Microsoft Entra ID-Dienst:
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.
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.
Navigieren Sie zu Entra ID>, und wählen Sie Ihre Anwendung im Hauptfenster aus.
Wählen Sie unter "Verwalten" die Option "Zertifikate und Geheime Schlüssel" aus.
Wählen Sie die Registerkarte " Verbundanmeldeinformationen" und dann "Anmeldeinformationen hinzufügen" aus.
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
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}");
}
}
}