Configura la identitat gestionada de Power Platform per a plug-ins o paquets de plug-in de Dataverse

Quan utilitzes la identitat gestionada de Power Platform, els connectors o paquets de plugins de Dataverse es poden connectar als recursos d'Azure sense gestionar les credencials. Aquest article descriu la configuració recomanada (versió 2), que construeix la credencial d'identitat federada (FIC) a partir d'un hash del Nom Distingit complet (DN) del certificat.

Nota

Utilitza Power Platform Managed Identity versió 2 per a tots els connectors nous i existents. Si mantens un complement que encara utilitza el format de la versió 1 (basat en CN), consulta Configurar la identitat gestionada versió 1. Per moure un connector existent a la versió 2, vegeu Actualitzar a la versió 2.

Per què versió 2

La versió 2 produeix un identificador de subjecte de longitud fixa, només ASCII, així que funciona amb qualsevol nom de certificat. La versió 1 falla en certs noms de certificats (CN):

  • Caràcters no ASCII al CN (per exemple, lletres accentuades) → AADSTS70050: The Federated Managed Identity path is not properly formatted.
  • Comes al CN (per exemple, CN=Contoso, Inc.) → . AADSTS700213: No matching federated identity record found

Requisits previs

  • Una subscripció a Azure amb accés per provar la identitat gestionada assignada per l'usuari (UAMI) o el registre d'aplicacions.
  • Eines per a plug-ins o paquets de plug-in:
  • Certificat vàlid per signar l'assemblatge del connector.

Configurar la identitat administrada

  1. Creeu un registre d'aplicació o una identitat administrada assignada per l'usuari.
  2. Construeix, signa i registra el connector.
  3. Configura la credencial d'identitat federada.
  4. Crea el registre d'identitat gestionat a Dataverse.
  5. Concedeix accés al recurs Azure.
  6. Valida la integració.

Pas 1: Crear un registre d'aplicació o una identitat gestionada assignada per l'usuari

Crea una identitat gestionada assignada per l'usuari o una aplicació a Microsoft Entra ID:

Nota

Captura l'ID de l'aplicació (client) i l'ID del llogater — els utilitzaràs en passos posteriors.

Pas 2: Construeix, signa i registra el connector

  1. Crea un complement a Visual Studio. Utilitza l'ID de llogater del pas 1 i un abast com https://{OrgName}.crm*.dynamics.com/.default. Utilitza IManagedIdentityService per sol·licitar un token:

    string AcquireToken(IEnumerable<string> scopes);
    
  2. Signa el complement amb el teu certificat.

    Paquet de connectors (NuGet):

    nuget sign YourPlugin.nupkg `
      -CertificatePath MyCert.pfx `
      -CertificatePassword "MyPassword" `
      -Timestamper http://timestamp.digicert.com
    

    Assemblatge de connectors (SignTool):

    signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dll
    
  3. Registra el connector utilitzant l'eina de registre del connector.

Nota

Utilitza un certificat autosignat només per al desenvolupament o proves. No utilitzis certificats autosignats en producció. Per crear-ne un, vegeu Generar un certificat autosignat.

Pas 3: Configurar la credencial d'identitat federada

Al portal d'Azure, obre la teva aplicació o la identitat gestionada assignada per l'usuari (UAMI), ves a Certificats i secrets>Credencials>federades Afegeix credencial i selecciona Altre emissor. Després introdueix:

  • Emissor — https://login.microsoftonline.com/{tenantID}/v2.0

  • Tipus — Identificador explícit de subjecte

  • Identificador de subjecte — utilitza el format del teu tipus de certificat:

    • Certificat d'emissor de confiança (producció):

      /eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuerHash}/s/{subjectHash}
      
    • Certificat autosignat (només desenvolupament):

      /eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/h/{hash}
      

    Referència del segment

    Segment Descripció
    eid1 Versió del format d'identitat
    c/pub Codi al núvol per al núvol públic, GCC i primera estació de llançament al GCC
    t/{encodedTenantId} ID de llogater. Vegeu Obtenir l'ID de llogant codificat
    a/qzXoWDkuqUa3l6zM5mM0Rw/ Només ús intern. No modifiquis
    n/plugin Component plug-in
    e/{environmentId} ID de l'entorn
    i/{issuerHash} s/{subjectHash} SHA-256 Base64URL del DN complet de l'emissor/subjecte. Vegeu Calcular els hashs de l'emissor i del subjecte
    h/{hash} SHA-256 del certificat (només autosignat)

Calcula els hashs de l'emissor i del subjecte

Pren el hash SHA-256 de les cadenes DN completes de l'emissor i subjecte tal com apareixen al certificat, i codifica cadascuna com a Base64 segur per URL. Aconsegueix les cordes DN amb:

$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
Write-Host "Issuer:  $($cert.Issuer)"
Write-Host "Subject: $($cert.Subject)"

Calcula els hashes (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 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 sortida és una cadena de 43 caràcters que conté només A-Z, a-z, 0-9, -, i _.

Important

Utilitza exactament la cadena de DN que utilitza el runtime (el .NET X509Certificate2.Issuer i X509Certificate2.Subject les propietats). Un DN amb un format diferent no coincidirà i falla amb AADSTS700213.

Nota

Per a desplegaments fora del núvol públic, estableix valors específics del núvol. Vegeu Entorns especialitzats al núvol d'Azure.

Pas 4: Crea el registre d'identitat gestionada a Dataverse

Envia una petició HTTP POST utilitzant un client REST. Per a la versió 2, estableix version a 2.

POST https://<<orgURL>>/api/data/v9.0/managedidentities
{
  "applicationid": "<<appId>>",
  "managedidentityid": "<<anyGuid>>",
  "credentialsource": 2,
  "subjectscope": 1,
  "tenantid": "<<tenantId>>",
  "version": 2
}

Després, vincula l'assemblatge del connector (o paquet) al registre:

PATCH https://<<orgURL>>/api/data/v9.0/pluginassemblies(<<PluginAssemblyId>>)
{
  "managedidentityid@odata.bind": "/managedidentities(<<ManagedIdentityGuid>>)"
}

Per a un paquet de plugins, utilitza pluginpackages(<<PluginPackageId>>) en comptes d'això.

Pas 5: Concedeix accés al recurs d'Azure

Concedeix a l'aplicació o a la identitat gestionada assignada per l'usuari accés al recurs Azure que necessita, com ara Azure Key Vault.

Pas 6: Validar la integració

Activa el connector i confirma que adquireix un token i arriba al recurs d'Azure sense credencials separades.

Actualització a la versió 2

Si tens un connector a la versió 0 o 1, pots moure'l a la versió 2 sense haver de reconstruir ni tornar a registrar el connector.

Opció 1: CLI de Power Platform

Nota

Els verbs d'identitat gestionada per CLI no funcionen en sistemes operatius basats en Linux ni amb la identitat gestionada assignada per l'usuari (UAMI). Si la CLI no funciona per al teu certificat, utilitza l'Opció 2: Manual.

  1. Instal·la la CLI de Power Platform versió 2.8.1 o posterior. Vegeu Instal·lar Microsoft Power Platform CLI.
  2. Crea un perfil d'autenticació: pac auth create
  3. Comprova la versió actual: pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2
  4. Actualització: pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm
  5. Activa el connector per validar.

Opció 2: Manual

  1. Calcula els hashs de l'emissor i del subjecte de la versió 2. Vegeu Calcular els hashs de l'emissor i del subjecte.

  2. Afegeix un nou FIC amb el format d'identificador de subjecte de la versió 2 (Pas 3).

  3. Actualitza el registre d'identitat gestionada a la versió 2:

    PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>)
    
    { "version": 2 }
    
  4. Activa el connector i verifica que l'adquisició de tokens ha tingut èxit.

  5. Elimina l'antiga versió 1 FIC.

Nota

La versió 0 està obsoleta. El suport de la CLI per generar el FIC de la versió 2 està en procés.

Referència

Aconsegueix l'ID de llogant codificat

L'ID de tenant codificat és el GUID del tenant convertit en bytes i codificat com a Base64URL (no Base64 estàndard):

$tenantId = "<your-tenant-guid>"
$tenantGuid = [System.Guid]::Parse($tenantId)
$tenantBytes = $tenantGuid.ToByteArray()
$base64 = [System.Convert]::ToBase64String($tenantBytes)
$encodedTenantId = $base64.Replace('+', '-').Replace('/', '_').TrimEnd('=')
$encodedTenantId

Genera un certificat autosignat

Només per al desenvolupament o proves:

$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

Calcular l'autosignat {hash} (SHA-256 sobre el .cer; exportar des d'un .pfx primer si cal):

CertUtil -hashfile <CertificateFilePath> SHA256

$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
$cert.RawData | Set-Content -Encoding Byte -Path "extracted.cer"

Entorns especialitzats al núvol d'Azure

Estableix explícitament el prefix d'audiència, URL de l'emissor i subjecte quan es desplegui fora del núvol públic, GCC i la primera estació de llançament a GCC.

Núvol Públic URL de l'emissor Prefix del tema
GCC High i DoD api://AzureADTokenExchangeUSGov https://login.microsoftonline.us /eid1/c/usg
Mooncake (Xina) api://AzureADTokenExchangeChina https://login.partner.microsoftonline.cn /eid1/c/chn
Nacional dels Estats Units (USNAT) api://AzureADTokenExchangeUSNat https://login.microsoftonline.eaglex.ic.gov /eid1/c/uss
Segur dels EUA (USSec) api://AzureADTokenExchangeUSSec https://login.microsoftonline.scloud /eid1/c/usn

Nota

El valor de l'audiència és sensible a majúscules i maiúscules. Per al núvol públic, GCC i l'estació de primera versió a GCC, els predeterminats són Audiència api://AzureADTokenExchange, Emissor https://login.microsoftonline.comi prefix /eid1/c/pubde subjecte.

Preguntes més freqüents

Com puc resoldre AADSTS700213: No s'ha trobat cap registre d'identitat federada coincident?

L'identificador de subjecte calculat en temps d'execució no coincideix amb cap FIC de l'aplicació. Comprova això:

  1. Has configurat i desat el FIC.
  2. L'emissor i el subjecte coincideixen amb el format del Pas 3. També podeu trobar el format esperat a la pila d'errors.
  3. El registre version és 2 i el FIC utilitza el format hash de la versió 2.
  4. El hash es calcula a partir de la cadena DN (X509Certificate2.Issuer / X509Certificate2.Subject).
  5. L'emissor és https://login.microsoftonline.com/{tenantId}/v2.0 i l'audiència és api://AzureADTokenExchange (sensible a majúscules i minúscules).

Com puc resoldre AADSTS70050: El camí de la Identitat Gestionada Federada no està correctament formatat?

L'identificador de subjecte conté caràcters que el proveïdor d'identitat no accepta — normalment caràcters no ASCII al certificat CN de la versió 1. La versió 2 produeix un identificador de subjecte només ASCII i resol aquest error.

Com puc resoldre l'error "No es pot accedir o connectar-se a Power Platform"?

Per assegurar que els punts finals de Power Platform siguin accessibles i autoritzats, consulteu les URL i rangs d'adreces IP de Power Platform.