Een toepassing configureren om een beheerde identiteit te vertrouwen (preview)
In dit artikel wordt beschreven hoe u een Microsoft Entra-toepassing configureert om een beheerde identiteit te vertrouwen. Vervolgens kunt u het beheerde identiteitstoken uitwisselen voor een toegangstoken dat toegang heeft tot met Microsoft Entra beveiligde resources zonder dat u app-geheimen hoeft te gebruiken of te beheren.
Voorwaarden
- Een Azure-account met een actief abonnement. Maak gratis een account.
- Dit Azure-account moet machtigingen hebben voor het beheren van toepassingen, met name voor het updatemachtigingen. Een van de volgende Microsoft Entra-rollen omvat de vereiste machtigingen:
- Inzicht in de concepten van beheerde identiteiten voor Azure-resources.
- een door de gebruiker toegewezen beheerde identiteit toegewezen aan de Azure-rekenresource (bijvoorbeeld een virtuele machine of Azure App Service) die als host fungeert voor uw workload.
- Een app-registratie in Microsoft Entra ID. Deze app-registratie moet behoren tot dezelfde tenant als de beheerde identiteit
- Als u toegang nodig hebt tot resources in een andere tenant, moet uw app-registratie een multitenant-toepassing zijn en de app inrichten in de andere tenant. Daarnaast moet u de app toegangsmachtigingen verlenen voor de resources in die tenant. Leer over hoe je een multitenant-app toevoegt aan andere omgevingen
- De app-registratie moet toegang hebben tot met Microsoft Entra beveiligde resources (bijvoorbeeld Azure, Microsoft Graph, Microsoft 365, enzovoort). Deze toegang kan worden verleend via API-machtigingen of gedelegeerde machtigingen.
Belangrijke overwegingen en beperkingen
Als u een federatieve identiteitsreferentie wilt maken, bijwerken of verwijderen, moet het account dat de actie uitvoert de rol van toepassingsbeheerder hebben, toepassingsontwikkelaar, cloudtoepassingsbeheerderof toepassingseigenaar. De microsoft.directory/applications/credentials/update permission is vereist om een federatieve identiteitsreferentie bij te werken.
Er kunnen maximaal 20 federatieve identiteitsreferenties worden toegevoegd aan een toepassing of door de gebruiker toegewezen beheerde identiteit.
Wanneer u een federatieve identiteitsreferentie configureert, zijn er verschillende belangrijke gegevens die u kunt opgeven:
uitgever en entiteit zijn de belangrijkste gegevens die nodig zijn om de vertrouwensrelatie in te stellen. De combinatie van
issuer
ensubject
moet uniek zijn in de app. Wanneer de Azure-workload Microsoft identity platform aanvraagt om het token voor beheerde identiteit uit te wisselen voor een toegangstoken, worden de uitgever en subject waarden van de federatieve identiteitsreferentie gecontroleerd op deissuer
ensubject
claims die zijn opgegeven in het beheerde identiteit-token. Als deze validatiecontrole slaagt, geeft het Microsoft Identity Platform een toegangstoken uit aan de externe softwarewerkload.issuer is de URL van de authoriteit-URL van de Microsoft Entra-tenant in het formaat
https://login.microsoftonline.com/{tenant}/v2.0
. De Microsoft Entra-app en de beheerde identiteit moeten deel uitmaken van dezelfde tenant. Als deissuer
claim voorloop- of volgspaties in de waarde heeft, wordt de tokenuitwisseling geblokkeerd.Belangrijk
Hoewel de app-registratie en de beheerde identiteit zich in dezelfde tenant moeten bevinden, kan de service-principal van de app-registratie het beheerde identiteitstoken nog steeds inwisselen.
onderwerp is de GUID van de object-ID (principal-ID) van de beheerde identiteit die aan de Azure-workload is toegewezen. Het Microsoft Identity Platform kijkt naar het binnenkomende externe token en weigert de uitwisseling voor een toegangstoken als het onderwerp veld dat is geconfigureerd in de federatieve identiteitsreferentie, niet overeenkomt met de principal-id van de beheerde identiteit. De GUID is hoofdlettergevoelig.
-
Belangrijk
U kunt in deze functie alleen User-Assigned beheerde identiteiten gebruiken.
*Doelgroepen vermelden de doelgroepen die kunnen worden weergegeven in het externe token (vereist). U moet één doelgroepwaarde toevoegen, met een limiet van 600 tekens. De waarde moet een van de volgende zijn en moet overeenkomen met de waarde van de
aud
claim in het token voor beheerde identiteit.-
openbare cloud:
api://AzureADTokenExchange
-
Fairfax:
api://AzureADTokenExchangeUSGov
-
Mooncake:
api://AzureADTokenExchangeChina
-
USNat-:
api://AzureADTokenExchangeUSNat
-
USSec:
api://AzureADTokenExchangeUSSec
Belangrijk
Als u per ongeluk onjuiste informatie toevoegt aan de issuer, onderwerp of doelgroep, wordt de federatieve identiteitsreferentie zonder fouten aangemaakt. De fout wordt pas zichtbaar wanneer de tokenuitwisseling mislukt.
-
openbare cloud:
Naam is de unieke identificator voor de federatieve identiteitsreferentie. (Vereist) Dit veld heeft een tekenlimiet van 3-120 tekens en moet URL-vriendelijk zijn. Alfanumerieke tekens, streepjes of onderstrepingstekens worden ondersteund en het eerste teken mag alleen alfanumeriek zijn. Het is onveranderbaar nadat deze is gemaakt.
beschrijving is de door de gebruiker verstrekte beschrijving van de federatieve identiteitsreferentie (optioneel). De beschrijving wordt niet gevalideerd of gecontroleerd door Microsoft Entra-id. Dit veld heeft een limiet van 600 tekens.
Jokertekens worden niet ondersteund in een federatieve id-eigenschapswaarde.
De object-id van de beheerde identiteit ophalen
- Meld u aan bij de Azure Portal.
- Voer Beheerde Identiteitenin het zoekvak in. Selecteer Beheerde identiteitenonder Services.
- Zoek en selecteer de door de gebruiker toegewezen beheerde identiteit die u hebt gemaakt als onderdeel van de vereisten.
- Kopieer in het deelvenster Overzicht de waarde van de Object-id (principaal). Deze waarde wordt gebruikt als het onderwerpveld in de configuratie van federatieve referenties.
Een federatieve identiteitsreferentie configureren voor een bestaande toepassing
In deze sectie configureert u een federatieve identiteitsreferentie voor een bestaande toepassing om een beheerde identiteit te vertrouwen. Gebruik de volgende tabbladen om te kiezen hoe u een federatieve identiteitsreferentie voor een bestaande toepassing configureert.
Meld u aan bij het Microsoft Entra-beheercentrum. Controleer of u zich in de tenant bevindt waar uw toepassing is geregistreerd.
Blader naar Identity>Applications>App-registratiesen selecteer uw toepassing in het hoofdvenster.
Selecteer onder Beheren, Certificaten & geheimen.
Selecteer het tabblad Federatieve referenties en selecteer Referentie toevoegen.
Selecteer in het scenario met federatieve referenties vervolgkeuzelijst andere verleners en vul de waarden in volgens de volgende tabel:
Veld Beschrijving Voorbeeld Uitgevende instelling De URL van de OAuth 2.0/OIDC-issuer van de Microsoft Entra ID-autoriteit. https://login.microsoftonline.com/{tenantID}/v2.0
Onderwerp-id De Principal ID
GUID van de beheerde identiteit.aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
Naam Een unieke beschrijvende naam voor het bewijs. msi-webapp1 Beschrijving (optioneel) Een door de gebruiker verstrekte beschrijving van de federatieve identiteitsreferentie. vertrouw de werkbelastingen die UAMI moet imiteren voor de app- Audiëntie De doelgroepwaarde die moet worden weergegeven in het externe token. • openbare cloud: api://AzureADTokenExchange
• Fairfax: api://AzureADTokenExchangeUSGov
• Mooncake: api://AzureADTokenExchangeChina
• USNat-: api://AzureADTokenExchangeUSNat
• USSec: api://AzureADTokenExchangeUSSec
Uw toepassingscode bijwerken om een toegangstoken aan te vragen
In onderstaande tabel ziet u codevoorbeelden die clientreferentie-'service naar service'-stromen tonen. Beheerde identiteiten als inloggegevens kunnen echter worden gebruikt in andere authenticatiestromen, zoals namens anderen (OBO)-stromen. De voorbeelden zijn geldig in beide gevallen waarin de resourcetenant zich in dezelfde tenant bevindt als de app-registratie en de beheerde identiteit, of in een andere tenant.
Azure.Identity
In het volgende voorbeeld ziet u hoe u verbinding maakt met een Azure-opslagcontainer met behulp van Azure.Identity
, maar kan worden aangepast voor toegang tot elke resource die wordt beveiligd door Microsoft Entra. De voorbeelden zijn geldig zowel in gevallen waarin de resourcetenant zich in dezelfde tenant bevindt als de app-registratie en de beheerde identiteit, als in gevallen waarin het zich in een andere tenant bevindt.
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
In Microsoft.Identity.Webkan een webtoepassing of web-API het clientcertificaat vervangen door een ondertekende clientverklaring voor verificatie. In uw toepassing kunt u de sectie ClientCredentials
in uw appsettings.json bijwerken naar de volgende configuratie:
{
"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)
In MSAL-kunt u de klasse ManagedClientApplication gebruiken om een token voor beheerde identiteit te verkrijgen. Dit token kan vervolgens worden gebruikt als clientverklaring bij het maken van een vertrouwelijke clienttoepassing.
Waarschuwing
Voor .NET-apps raden we u sterk aan om bibliotheken op een hoger niveau te gebruiken die zijn gebaseerd op MSAL, zoals Microsoft.Identity.Web of 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}");
}
}
}