Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment configurer une application Microsoft Entra pour approuver une identité managée. Vous pouvez ensuite échanger le jeton d’identité managée pour un jeton d’accès qui peut accéder aux ressources protégées de Microsoft Entra sans avoir à utiliser ou à gérer les secrets d’application.
Conditions préalables
- Un compte Azure avec un abonnement actif. Créez gratuitement un compte.
- Ce compte Azure doit disposer des autorisations nécessaires pour mettre à jour les informations d’identification de l’application. Les rôles Microsoft Entra suivants incluent les autorisations requises :
- Compréhension des concepts des identités managées pour les ressources Azure.
- Une identité gérée assignée par l'utilisateur à la ressource de calcul Azure (par exemple, une machine virtuelle ou Azure App Service) qui héberge votre charge de travail.
- Enregistrement d'une application dans Microsoft Entra ID. Cette inscription d'application doit appartenir au même locataire que l'identité gérée.
- Si vous devez accéder aux ressources d’un autre client, l’enregistrement de votre application doit être une application multi-clients et être provisionnée dans l’autre client. Découvrez comment ajouter une application multitenant dans d’autres locataires.
- L'inscription de l'application doit avoir une autorisation d'accès aux ressources protégées de Microsoft Entra (par exemple, Azure, Microsoft Graph, Microsoft 365, etc.). Cet accès peut être accordé via des autorisations d’API ou des autorisations déléguées .
Considérations et restrictions importantes
Pour créer, mettre à jour ou supprimer des informations d’identification d’identité fédérée, le compte effectuant l’action doit avoir leadministrateur d’application
Un maximum de 20 informations d’identification d’identité fédérée peuvent être ajoutées à une application ou à une identité managée affectée par l’utilisateur.
Lorsque vous configurez des informations d’identification d’identité fédérée, il existe plusieurs informations importantes à fournir :
Les éléments clés d'information, émetteur et objet, sont nécessaires pour établir la relation de confiance. Lorsque la charge de travail Azure demande à la plateforme d’identités Microsoft d’échanger le jeton d’identité managée pour un jeton d’accès d’application Entra, l’émetteur et les valeurs d’objet des informations d’identification d’identité fédérée sont vérifiées par rapport aux
issuersubjectrevendications fournies dans le jeton d’identité managée. Si cette vérification de validation réussit, la plateforme d’identités Microsoft émet un jeton d’accès à la charge de travail logicielle externe.L’émetteur est l’URL de l’URL d’autorité du locataire Microsoft Entra sous la forme
https://login.microsoftonline.com/{tenant}/v2.0. L’application Microsoft Entra et l’identité managée doivent appartenir au même locataire. Si la revendicationissuera un espace blanc de début ou de fin dans la valeur, l’échange de jetons est bloqué.subject: il s’agit du GUID sensible à la casse de l’ID d’objet (principal) de l’identité gérée attribuée à la charge de travail Azure. L'identité gérée doit se trouver dans le même locataire que l'inscription de l'application, même si la ressource cible se trouve dans un cloud différent. La plateforme d'identité Microsoft rejette l'échange de jetons si la configuration des informations d'identité fédéréesubjectne correspond pas exactement à l'ID principal de l'identité gérée.audiences spécifie la valeur qui apparaît dans la revendication
auddu jeton d’identité managé (obligatoire). La valeur doit être l’une des suivantes en fonction du cloud cible.-
Service global Microsoft Entra ID :
api://AzureADTokenExchange -
ID Microsoft Entra pour le gouvernement des États-Unis :
api://AzureADTokenExchangeUSGov -
Microsoft Entra China géré par 21Vianet :
api://AzureADTokenExchangeChina
Importante
L’accès aux ressources dans un autre tenant est pris en charge. L’accès aux ressources dans un autre cloud n’est pas pris en charge. Les demandes de jetons adressées à d’autres clouds échouent.
Importante
Si vous ajoutez accidentellement des informations incorrectes dans le réglage de l’émetteur, de l’objet ou de l’audience, les informations d’identification de l’identité fédérée sont créées avec succès, sans erreur. L’erreur n’apparaît pas tant que l’échange de jetons n’a pas échoué.
-
Service global Microsoft Entra ID :
nom est l’identificateur unique des informations d’identification de l’identité fédérée. (Obligatoire) Ce champ a une limite de caractères de 3 à 120 caractères et doit être convivial pour l’URL. Les caractères alphanumériques, un tiret ou un trait de soulignement sont pris en charge, et le premier caractère doit être uniquement alphanumérique. Il est immuable une fois créé.
description est la description fournie par l’utilisateur des informations d’identification d’identité fédérée (facultatif). La description n’est pas validée ou vérifiée par l’ID Microsoft Entra. Ce champ a une limite de 600 caractères.
Les caractères génériques ne sont pris en charge dans aucune des valeurs de propriété d’informations d’identification d’identité fédérées.
Configurer des informations d’identification d’identité fédérée sur une application
Dans cette section, vous allez configurer des informations d’identification d’identité fédérée sur une application existante pour approuver une identité managée. Utilisez les onglets suivants pour choisir comment configurer des informations d’identification d’identité fédérées sur une application existante.
Connectez-vous au centre d’administration Microsoft Entra . Vérifiez que vous vous trouvez dans le locataire où votre application est enregistrée.
Accédez à Entra ID>inscriptions d’application, puis sélectionnez votre application dans la fenêtre principale.
Sous Gérer, sélectionnez Certificats et secrets.
Sélectionnez l’onglet Informations d’identification fédérées et sélectionnez Ajouter des informations d’identification.
Dans la liste déroulante des scénarios d’informations d’identification fédérées , sélectionnez Identité managée et renseignez les valeurs en fonction du tableau suivant :
Champ Descriptif Exemple Émetteur URL de l’émetteur OAuth 2.0 / OIDC de l’autorité Microsoft Entra ID qui émet le jeton d’identité managée. Cette valeur est automatiquement renseignée avec l'émetteur de locataire Entra actuel. https://login.microsoftonline.com/{tenantID}/v2.0Sélectionner une identité managée Cliquez sur ce lien pour sélectionner l'identité gérée qui servira d'identifiant d'identité fédérée. Vous ne pouvez utiliser que des identités gérées attribuées par l'utilisateur comme informations d'identification. msi-webapp1 Description (facultatif) Description fournie par l'utilisateur du crédentiel d'identité fédérée. Faites confiance aux charges de travail de l’OAMI comme référence pour mon application. Public visé Valeur d'audience qui doit apparaître dans le jeton externe. Doit être défini sur l’une des valeurs suivantes :
• Entra ID Global Service : api://AzureADTokenExchange
• ID Entra pour le gouvernement des États-Unis : api://AzureADTokenExchangeUSGov
• Entra ID China géré par 21Vianet : api://AzureADTokenExchangeChina
Mettre à jour votre code d’application pour demander un jeton d’accès
Les extraits de code suivants montrent comment acquérir un jeton d’identité managée et l’utiliser comme informations d’identification pour votre application Entra. Les exemples sont valides dans les deux cas où la ressource cible se trouve dans le même domaine que l’application Entra ou dans un domaine différent.
Bibliothèques clientes d’identité Azure
Les exemples de code suivants illustrent l’accès à un secret Azure Key Vault, mais peuvent être adaptés pour accéder à n’importe quelle ressource protégée par Microsoft Entra.
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
Dans Microsoft.Identity.Web, vous pouvez définir la section ClientCredentials de votre appsettings.json pour utiliser SignedAssertionFromManagedIdentity afin de permettre à votre code d'utiliser l'identité managée configurée comme informations d’identification :
{
"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)
Dans MSAL, vous pouvez utiliser la classe ManagedClientApplication pour acquérir un jeton d’identité managée. Ce jeton peut ensuite être utilisé comme assertion cliente lors de la construction d’une application cliente confidentielle.
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}");
}
}
}