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.
Cuando se usa la identidad administrada de Power Platform, los complementos o paquetes de complementos de Dataverse pueden conectarse a recursos de Azure sin administrar credenciales. En este artículo se describe la configuración recomendada (versión 2), que compila la credencial de identidad federada (FIC) a partir de un hash del nombre distintivo completo del certificado (DN).
Nota:
Use la identidad administrada de Power Platform versión 2 para todos los complementos nuevos y existentes. Si mantiene un complemento que sigue usando el formato de versión 1 (basado en CN), consulte Configuración de la identidad administrada versión 1. Para mover un complemento existente a la versión 2, consulte Actualización a la versión 2.
Por qué la versión 2
La versión 2 genera un identificador de sujeto de solo ASCII de longitud fija, por lo que funciona con cualquier nombre de certificado. Se produce un error en la versión 1 en determinados nombres de certificado (CN):
-
Caracteres no ASCII en el CN (por ejemplo, letras acentuadas) →
AADSTS70050: The Federated Managed Identity path is not properly formatted. -
Comas en el CN (por ejemplo,
CN=Contoso, Inc.) →AADSTS700213: No matching federated identity record found.
Prerrequisitos
- Una suscripción de Azure con acceso para aprovisionar la identidad administrada asignada por el usuario (UAMI) o el registro de aplicaciones.
- Herramientas para complementos o paquetes de complementos:
- Entorno de desarrollo integrado (IDE), como Visual Studio, para compilar el complemento
- Plug-in Registration tool (PRT)
- SignTool.exe (Herramienta de firma) para firmar el ensamblado del complemento
- Power Platform CLI
- Certificado válido para firmar el ensamblado del complemento.
Configuración de la identidad administrada
- Cree un nuevo registro de aplicación o una identidad administrada asignada por el usuario.
- Compile, firme y registre el complemento.
- Configure la credencial de identidad federada.
- Cree el registro de identidad administrada en Dataverse.
- Conceda acceso al recurso de Azure.
- Valide la integración.
Paso 1: Crear un registro de aplicación o una identidad administrada asignada por el usuario
Cree una identidad administrada asignada por el usuario o una aplicación en Microsoft Entra ID:
- Para una identidad de aplicación asociada al complemento (para poder aplicar directivas de Azure), use el registro de una aplicación.
- Para una entidad de servicio, aprovisione una identidad administrada asignada por el usuario.
Nota:
Capture el identificador de la aplicación (cliente) y el identificador de inquilino : los usará en pasos posteriores.
Paso 2: Compilar, firmar y registrar el complemento
Cree un complemento en Visual Studio. Use el identificador de inquilino del paso 1 y un ámbito como
https://{OrgName}.crm*.dynamics.com/.default. Use IManagedIdentityService para solicitar un token:string AcquireToken(IEnumerable<string> scopes);Firme el complemento con su certificado.
Paquete de complemento (NuGet):
nuget sign YourPlugin.nupkg ` -CertificatePath MyCert.pfx ` -CertificatePassword "MyPassword" ` -Timestamper http://timestamp.digicert.comEnsamblado de complemento (SignTool):
signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dllRegistre el complemento mediante la herramienta de registro del complemento.
Nota:
Use un certificado autofirmado solo para desarrollo o pruebas. No use certificados autofirmados en producción. Para crear uno, consulte Generación de un certificado autofirmado.
Paso 3: Configurar la credencial de identidad federada
En el portal de Azure, abra la aplicación o la identidad administrada asignada por el usuario (UAMI), vaya a Certificados y secretos>>Agregar credenciales y seleccione Otro emisor. A continuación, escriba:
Emisor :
https://login.microsoftonline.com/{tenantID}/v2.0Tipo : identificador de sujeto explícito
Identificador del sujeto — utilice el formato correspondiente a su tipo de certificado:
Certificado de emisor de confianza (producción):
/eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuerHash}/s/{subjectHash}Certificado autofirmado (solo para desarrollo):
/eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/h/{hash}
Referencia de segmento
Segmento Descripción eid1Versión del formato de identidad c/pubCódigo en la nube para la nube pública, GCC y la primera estación de lanzamiento en GCC t/{encodedTenantId}Identificador de inquilino. Consulte Obtención del identificador de inquilino codificado. a/qzXoWDkuqUa3l6zM5mM0Rw/Solo uso interno. No modificar n/pluginComponente de complemento e/{environmentId}Id. de entorno i/{issuerHash}s/{subjectHash}Hash SHA-256 Base64URL del DN completo del emisor/sujeto. Consulte Calcular los hashes del emisor y del sujeto h/{hash}SHA-256 del certificado (solo autofirmado)
Calcular los hashes del emisor y del sujeto
Calcule el hash SHA-256 de las cadenas DN completas del emisor y del asunto, tal como aparecen en el certificado, y codifique cada una en Base64 seguro para URL. Obtenga las secuencias DN con:
$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
Write-Host "Issuer: $($cert.Issuer)"
Write-Host "Subject: $($cert.Subject)"
Calcule los hash (PowerShell):
function Get-Sha256Base64Url {
param([string]$InputString)
$bytes = [System.Text.Encoding]::UTF8.GetBytes($InputString)
$sha256 = [System.Security.Cryptography.SHA256]::Create()
$hash = $sha256.ComputeHash($bytes)
$base64 = [Convert]::ToBase64String($hash)
return $base64.Replace('+', '-').Replace('/', '_').TrimEnd('=')
}
$issuerHash = Get-Sha256Base64Url -InputString "<full issuer DN string>"
$subjectHash = Get-Sha256Base64Url -InputString "<full subject DN string>"
Write-Host "Issuer Hash: $issuerHash"
Write-Host "Subject Hash: $subjectHash"
O bien en C#:
using System.Security.Cryptography;
using System.Text;
static string ComputeSha256Base64Url(string input)
{
using var sha256 = SHA256.Create();
byte[] hashBytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(input));
return Convert.ToBase64String(hashBytes)
.Replace('+', '-')
.Replace('/', '_')
.TrimEnd('=');
}
La salida es una cadena de 43 caracteres que contiene solo A-Z, a-z, 0-9, - y _.
Importante
Use la cadena DN exacta que usa el entorno de ejecución (las propiedades X509Certificate2.Issuer .NET y X509Certificate2.Subject). Un DN con formato diferente no coincidirá y se producirá un error con AADSTS700213.
Nota:
En el caso de las implementaciones fuera de la nube pública, establezca valores específicos de la nube. Consulte Entornos de nube Azure especializados.
Paso 4: Creación del registro de identidad administrada en Dataverse
Envíe una solicitud HTTP POST mediante un cliente REST. Para la versión 2, establezca version en 2.
POST https://<<orgURL>>/api/data/v9.0/managedidentities
{
"applicationid": "<<appId>>",
"managedidentityid": "<<anyGuid>>",
"credentialsource": 2,
"subjectscope": 1,
"tenantid": "<<tenantId>>",
"version": 2
}
A continuación, enlace el ensamblado del complemento (o paquete) al registro:
PATCH https://<<orgURL>>/api/data/v9.0/pluginassemblies(<<PluginAssemblyId>>)
{
"managedidentityid@odata.bind": "/managedidentities(<<ManagedIdentityGuid>>)"
}
En el caso de un paquete de complemento, use pluginpackages(<<PluginPackageId>>) en su lugar.
Paso 5: Conceder acceso al recurso de Azure
Conceda a la aplicación o a la identidad administrada asignada por el usuario acceso al recurso Azure que necesita, como Azure Key Vault.
Paso 6: Validar la integración
Desencadene el complemento y confirme que adquiere un token y llega al recurso Azure sin credenciales independientes.
Actualización a la versión 2
Si tiene un complemento en la versión 0 o la versión 1, puede moverlo a la versión 2 sin volver a generar o volver a registrar el complemento.
Opción 1: CLI de Power Platform
Nota:
Los verbos de identidad administrada de la CLI no funcionan en sistemas operativos basados en Linux ni con identidad administrada asignada por el usuario (UAMI). Si la CLI no funciona para el certificado, use la opción 2: Manual.
- Instale la VERSIÓN 2.8.1 o posterior de la CLI de Power Platform. Consulte Instalación de la CLI de Microsoft Power Platform.
- Cree un perfil de autenticación:
pac auth create - Compruebe la versión actual:
pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2 - Actualizar:
pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm - Desencadene el complemento para validarlo.
Opción 2: Manual
Calcule los hashes de emisor y de sujeto de la versión 2. Consulte Calcular los hashes del emisor y del sujeto.
Agregar un nuevo FIC con el formato de identificador de sujeto de la versión 2 (Paso 3).
Actualice el registro de identidad administrada a la versión 2:
PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>){ "version": 2 }Desencadene el complemento y compruebe que la adquisición de tokens se realiza correctamente.
Elimine la versión antigua de FIC 1.
Nota:
La versión 0 está en desuso. La compatibilidad con la CLI para generar la versión 2 de FIC se está implementando.
Reference
Obtención del identificador de inquilino codificado
El id. de inquilino codificado es el GUID del inquilino convertido en bytes y codificado como Base64URL (no Base64 estándar):
$tenantId = "<your-tenant-guid>"
$tenantGuid = [System.Guid]::Parse($tenantId)
$tenantBytes = $tenantGuid.ToByteArray()
$base64 = [System.Convert]::ToBase64String($tenantBytes)
$encodedTenantId = $base64.Replace('+', '-').Replace('/', '_').TrimEnd('=')
$encodedTenantId
Generación de un certificado autofirmado
Solo para desarrollo o pruebas:
$params = @{
Type = 'Custom'
Subject = 'E=admin@contoso.com,CN=Contoso'
TextExtension = @(
'2.5.29.37={text}1.3.6.1.5.5.7.3.4',
'2.5.29.17={text}email=admin@contoso.com' )
KeyAlgorithm = 'RSA'
KeyLength = 2048
SmimeCapabilities = $true
CertStoreLocation = 'Cert:\CurrentUser\My'
}
New-SelfSignedCertificate @params
Calcule el certificado autofirmado {hash} (SHA-256 del .cer; expórtelo primero desde un .pfx si es necesario):
CertUtil -hashfile <CertificateFilePath> SHA256
$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
$cert.RawData | Set-Content -Encoding Byte -Path "extracted.cer"
Entornos especializados en la nube de Azure
Establezca Público, Dirección URL del emisor y Prefijo del asunto explícitamente al implementar fuera de la nube pública, GCC y la fase de primera liberación en GCC.
| Nube | Público | Dirección URL del emisor | Prefijo de asunto |
|---|---|---|---|
| GCC High y el Departamento de Defensa | api://AzureADTokenExchangeUSGov |
https://login.microsoftonline.us |
/eid1/c/usg |
| Pastel de Luna (China) | api://AzureADTokenExchangeChina |
https://login.partner.microsoftonline.cn |
/eid1/c/chn |
| Nacional de EE. UU. (USNAT) | api://AzureADTokenExchangeUSNat |
https://login.microsoftonline.eaglex.ic.gov |
/eid1/c/uss |
| Us Secure (USSec) | api://AzureADTokenExchangeUSSec |
https://login.microsoftonline.scloud |
/eid1/c/usn |
Nota:
El valor de Público distingue entre mayúsculas y minúsculas. Para la nube pública, GCC y la primera estación de lanzamiento en GCC, los valores predeterminados son Audience api://AzureADTokenExchange, Issuer https://login.microsoftonline.com, Subject prefix /eid1/c/pub.
Preguntas más frecuentes (FAQ)
¿Cómo puedo resolver AADSTS700213: No se encontró ningún registro de identidad federado coincidente?
El identificador de sujeto calculado en tiempo de ejecución no coincide con ningún FIC de la aplicación. Compruebe lo siguiente:
- Configuraste y guardaste el FIC.
- El emisor y el asunto coinciden con el formato del paso 3. También puede encontrar el formato esperado en la pila de errores.
- El registro
versiones2y FIC usa el formato hash de la versión 2. - El hash se calcula desde la cadena DN del tiempo de ejecución (
X509Certificate2.Issuer/X509Certificate2.Subject). - El emisor es
https://login.microsoftonline.com/{tenantId}/v2.0y el destinatario esapi://AzureADTokenExchange(distingue entre mayúsculas y minúsculas).
¿Cómo puedo resolver AADSTS70050: la ruta de acceso de la identidad administrada federada no tiene el formato correcto?
El identificador de sujeto contiene caracteres que el proveedor de identidad no acepta; normalmente, caracteres no ASCII en el CN del certificado de la versión 1. La versión 2 genera un identificador de sujeto de solo ASCII y resuelve este error.
¿Cómo se resuelve el error "No se puede alcanzar o establecer conexión a Power Platform"?
Para asegurarse de que los puntos de conexión de Power Platform son accesibles y permitidos, consulte Direcciones URL de Power Platform e intervalos de direcciones IP.