Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se describe cómo configurar una aplicación de Microsoft Entra para confiar en una identidad administrada. A continuación, puede intercambiar el token de identidad administrada para un token de acceso que pueda acceder a los recursos protegidos de Microsoft Entra sin necesidad de usar ni administrar secretos de aplicación.
Requisitos previos
- Una cuenta de Azure con una suscripción activa. Crear una cuenta gratuita.
- Esta cuenta de Azure debe tener permisos para actualizar las credenciales de la aplicación. Cualquiera de los siguientes roles de Microsoft Entra incluye los permisos necesarios:
- Descripción de los conceptos de identidades administradas para recursos de Azure.
- una identidad administrada asignada por el usuario asignada al recurso de proceso de Azure (por ejemplo, una máquina virtual o Azure App Service) que hospeda la carga de trabajo.
- Un Registro de una aplicación en Microsoft Entra ID. Este registro de aplicación debe pertenecer al mismo inquilino que la identidad administrada
- Si necesita acceder a los recursos de otra entidad, el registro de la aplicación debe ser una aplicación multicliente y aprovisionada en la otra entidad. Obtenga información sobre cómo agregar una aplicación multiusuario en otros entornos.
- El registro de la aplicación debe tener acceso concedido a los recursos protegidos de Microsoft Entra (por ejemplo, Azure, Microsoft Graph, Microsoft 365, etc.). Este acceso se puede conceder a través de permisos de API o permisos delegados .
Consideraciones y restricciones importantes
Para crear, actualizar o eliminar una credencial de identidad federada, la cuenta que realiza la acción debe tener el rol Administrador de aplicaciones, Desarrollador de aplicaciones, Administrador de aplicaciones en la nube, o Propietario de la aplicación. El permiso microsoft.directory/applications/credentials/update es necesario para actualizar una credencial de identidad federada.
Se pueden agregar un máximo de 20 credenciales de identidad federada a una aplicación o a una identidad administrada asignada por el usuario.
Al configurar una credencial de identidad federada se debe proporcionar cierta información importante:
issuer, subject son los elementos clave de la información necesaria para configurar la relación de confianza. Cuando la carga de trabajo de Azure solicita a la plataforma de identidad de Microsoft que intercambie el token de identidad administrada por un token de acceso de la aplicación Entra, los valores del emisor y del asunto de la credencial de identidad federada se comprueban contra las notificaciones
issuer
ysubject
proporcionadas en el token de identidad administrada. Si se supera esa comprobación de validación, la plataforma de identidad de Microsoft emite un token de acceso a la carga de trabajo de software externo.issuer es la dirección URL de la URL de autoridad del inquilino de Microsoft Entra con el formato
https://login.microsoftonline.com/{tenant}/v2.0
. Tanto la aplicación Microsoft Entra como la identidad administrada deben pertenecer al mismo inquilino. Si la reclamaciónissuer
tiene espacios en blanco iniciales o finales en el valor, se bloquea el intercambio de tokens.subject
: Este es el GUID sensible a mayúsculas y minúsculas del ID de objeto (entidad de seguridad) de la identidad administrada asignada a la carga de trabajo de Azure. La identidad administrada debe estar en el mismo inquilino que el registro de la aplicación, incluso si el recurso de destino está en una nube diferente. La plataforma de identidad de Microsoft rechazará el intercambio de tokens si la configuración de credenciales de identidad federadasubject
no coincide exactamente con el Principal ID de la identidad administrada.Importante
Solo las identidades administradas asignadas por el usuario se pueden usar como credenciales federadas para las aplicaciones. No se admiten identidades asignadas por el sistema.
audiencies especifica el valor que aparece en la declaración
aud
en el token de identidad administrada (obligatorio). El valor debe ser uno de los siguientes en función de la nube de destino.-
Microsoft Entra China (servicio global):
api://AzureADTokenExchange
-
Microsoft Entra ID para el Gobierno de EE.UU.:
api://AzureADTokenExchangeUSGov
-
Microsoft Entra China operado por 21Vianet:
api://AzureADTokenExchangeChina
Importante
Se admite el acceso a los recursos de otro inquilino. No se admite el acceso a recursos en otra nube . Se producirá un error en las solicitudes de token a otras nubes.
Importante
Si agrega accidentalmente la información en la configuración del issuer, subject o audience, la credencial de identidad federada se crea correctamente sin errores. El error no se vuelve evidente hasta que se produce un error en el intercambio de tokens.
-
Microsoft Entra China (servicio global):
nombre es el identificador único para la credencial de identidad federada. (Obligatorio) Este campo tiene un límite de 3 a 120 caracteres y debe ser compatible con URL. Se admiten caracteres alfanuméricos, guiones o caracteres de subrayado; y el primer carácter solo debe ser alfanumérico. Es inmutable una vez creado.
descripción es la descripción proporcionada por el usuario de la credencial de identidad federada (opcional). Microsoft Entra ID no valida ni comprueba la descripción. Este campo tiene un límite de 600 caracteres.
Los caracteres comodín no se admiten en ningún valor de propiedad de credencial de identidad federada.
Configuración de una credencial de identidad federada en una aplicación
En esta sección, configurará una credencial de identidad federada en una aplicación existente para confiar en una identidad administrada. Use las pestañas siguientes para elegir cómo configurar una credencial de identidad federada en una aplicación existente.
Inicie sesión en el Centro de administración de Microsoft Entra. Compruebe que está en el inquilino donde está registrada la aplicación.
Vaya a Entra ID>Registros de aplicaciones y seleccione su aplicación en la ventana principal.
En Administrar, seleccione Certificados y secretos.
Seleccione la pestaña Credenciales federadas y seleccione Agregar credenciales.
En la lista desplegable Escenario de credenciales federadas , seleccione Identidad administrada y rellene los valores según la tabla siguiente:
Campo Descripción Ejemplo Emisor La URL del emisor de OAuth 2.0 / OIDC, de la autoridad de Microsoft Entra ID que emite el token de identidad administrada. Este valor se rellena automáticamente con el emisor actual del inquilino de Entra. https://login.microsoftonline.com/{tenantID}/v2.0
Selección de la identidad administrada Haga clic en este vínculo para seleccionar la identidad administrada que actuará como credencial de identidad federada. Solo puede usar User-Assigned Identidades Administradas como credencial. msi-webapp1 Descripción (opcional) Descripción proporcionada por el usuario de la credencial de identidad federada. Confiar en las cargas de trabajo UAMI como una credencial para mi aplicación Público Valor de audiencia que debe aparecer en el token externo. Debe establecerse en uno de los siguientes valores:
• Servicio Global de Entra ID: api://AzureADTokenExchange
• ID de Entra para el Gobierno deEE. UU.: api://AzureADTokenExchangeUSGov
• Entra ID China operado por 21Vianet: api://AzureADTokenExchangeChina
Actualización del código de la aplicación para solicitar un token de acceso
Los fragmentos de código siguientes muestran cómo adquirir un token de identidad administrada y usarlo como credencial para la aplicación Entra. Los ejemplos son válidos en ambos casos donde el recurso de destino está en el mismo inquilino que la aplicación Entra, o en un inquilino diferente.
Bibliotecas cliente de Azure Identity
Los ejemplos de código siguientes muestran el acceso a un secreto de Azure Key Vault, pero se pueden adaptar para acceder a cualquier recurso protegido por 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
En Microsoft.Identity.Web, puede establecer la sección ClientCredentials
en su appsettings.json para usar SignedAssertionFromManagedIdentity
y habilitar su código que utiliza la identidad administrada configurada como credencial.
{
"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)
En MSAL, puede usar la clase ManagedClientApplication para adquirir un token de identidad administrada. A continuación, este token se puede usar como aserción de cliente al construir una aplicación cliente confidencial.
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}");
}
}
}