Konfigurera Power Platform-hanterad identitet för Dataverse-tilläggsprogram eller tilläggspaket

När du använder power platform-hanterad identitet kan Dataverse-plugin-program eller plugin-paket ansluta till Azure resurser utan att hantera autentiseringsuppgifter. I den här artikeln beskrivs den rekommenderade konfigurationen (version 2), som bygger den federerade identitetsautentiseringsuppgiften (FIC) från en hash av certifikatets fullständiga unika namn (DN).

Anmärkning

Använd Power Platform managed identity version 2 för alla nya och befintliga plugin-program. Om du har ett plugin-program som fortfarande använder formatet version 1 (CN-baserad) läser du Konfigurera hanterad identitet version 1. Information om hur du flyttar ett befintligt plugin-program till version 2 finns i Uppgradera till version 2.

Varför version 2

Version 2 genererar en ämnesidentifierare med fast längd, endast ASCII, så den fungerar med valfritt certifikatnamn. Version 1 misslyckas på vissa certifikatnamn (CN):

  • Icke-ASCII-tecken i CN (till exempel accentbeteckningar) → AADSTS70050: The Federated Managed Identity path is not properly formatted.
  • Kommatecken i CN (till exempel CN=Contoso, Inc.) → AADSTS700213: No matching federated identity record found.

Förutsättningar

Konfigurera hanterad identitet

  1. Skapa en ny appregistrering eller användartilldelad hanterad identitet.
  2. Skapa, logga in och registrera plugin-programmet.
  3. Konfigurera autentiseringsuppgiften för federerad identitet.
  4. Skapa den hanterade identitetsposten i Dataverse.
  5. Bevilja åtkomst till Azure resursen.
  6. Verifiera integreringen.

Steg 1: Skapa en appregistrering eller användartilldelad hanterad identitet

Skapa antingen en användartilldelad hanterad identitet eller ett program i Microsoft Entra ID:

Anmärkning

Notera Program-ID (klient) och Katalog-ID – du använder dem i senare steg.

Steg 2: Skapa, logga in och registrera plugin-programmet

  1. Skapa ett plugin-program i Visual Studio. Använd klientorganisations-ID:t från steg 1 och ett omfång som https://{OrgName}.crm*.dynamics.com/.default. Använd IManagedIdentityService för att begära en token:

    string AcquireToken(IEnumerable<string> scopes);
    
  2. Logga in plugin-programmet med ditt certifikat.

    Plugin-paket (NuGet):

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

    Sammansättning av plugin-program (SignTool):

    signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dll
    
  3. Registrera plugin-programmet med hjälp av plugin-registreringsverktyget.

Anmärkning

Använd endast ett självsignerat certifikat för utveckling eller testning. Använd inte självsignerade certifikat i produktion. Information om hur du skapar ett finns i Generera ett självsignerat certifikat.

Steg 3: Konfigurera federerade identitetsautentiseringsuppgifter

I Azure portalen öppnar du din app eller användartilldelade hanterade identitet (UAMI), går till Certifikat och hemligheter>Federerade autentiseringsuppgifter>Lägg till autentiseringsuppgifter och väljer Annan utfärdare. Ange sedan:

  • Utfärdarehttps://login.microsoftonline.com/{tenantID}/v2.0

  • TypUttrycklig subjektsidentifierare

  • Ämnesidentifierare – använd formatet för certifikattypen:

    • Certifikat för betrodd utfärdare (produktion):

      /eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuerHash}/s/{subjectHash}
      
    • Självsignerat certifikat (endast utveckling):

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

    Segmentreferens

    Segment Beskrivning
    eid1 Identitetsformatversion
    c/pub Molnkod för offentligt moln, GCC och första lanseringsstation i GCC
    t/{encodedTenantId} Kund-ID. Se Hämta det kodade klient-ID:t
    a/qzXoWDkuqUa3l6zM5mM0Rw/ Endast intern användning. Ändra inte
    n/plugin Plugin-komponent
    e/{environmentId} Miljö-ID
    i/{issuerHash} s/{subjectHash} SHA-256 Base64URL-hash för utfärdarens/innehavarens fullständiga DN. Se Beräkna hashvärdena för utfärdaren och innehavaren
    h/{hash} SHA-256 för certifikatet (endast självsignerat)

Beräkna hashvärdena för utfärdaren och innehavaren

Beräkna SHA-256-hashen för utfärdarens fullständiga DN-sträng och subjektets fullständiga DN-sträng, så som de visas på certifikatet, och koda var och en i URL-säker Base64. Hämta DN-strängarna med:

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

Beräkna hashvärdena (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"

Eller i 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('=');
}

Resultatet är en sträng på 43 tecken som endast innehåller A-Z, a-z, 0-9, - och _.

Viktigt!

Använd den exakta DN-strängen som körmiljön använder (.NET X509Certificate2.Issuer och X509Certificate2.Subject-egenskaperna). Ett annat formaterat DN matchar inte och misslyckas med AADSTS700213.

Anmärkning

För distributioner utanför det offentliga molnet anger du molnspecifika värden. Se Specialiserade Azure molnmiljöer.

Steg 4: Skapa den hanterade identitetsposten i Dataverse

Skicka en HTTP POST-begäran med hjälp av en REST-klient. För version 2 anger du version till 2.

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

Knyt sedan plugin-sammansättningen (eller paketet) till posten:

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

Använd pluginpackages(<<PluginPackageId>>) i stället för ett instickspaket.

Steg 5: Bevilja åtkomst till resursen Azure

Ge programmet eller den användartilldelade hanterade identiteten åtkomst till den Azure resurs som behövs, till exempel Azure Key Vault.

Steg 6: Verifiera integreringen

Utlös plugin-programmet och bekräfta att det hämtar en token och når den Azure resursen utan separata autentiseringsuppgifter.

Uppgradera till version 2

Om du har ett plugin-program på version 0 eller version 1 kan du flytta det till version 2 utan att återskapa eller registrera plugin-programmet igen.

Alternativ 1: Power Platform CLI

Anmärkning

CLI-hanterade identitetsverb fungerar inte på Linux-baserade operativsystem eller med användartilldelad hanterad identitet (UAMI). Om CLI inte fungerar för certifikatet använder du Alternativ 2: Manuell.

  1. Installera Power Platform CLI version 2.8.1 eller senare. Se Installera Microsoft Power Platform CLI.
  2. Skapa en autentiseringsprofil: pac auth create
  3. Kontrollera den aktuella versionen: pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2
  4. Uppgradera: pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm
  5. Utlös plugin-programmet för att verifiera.

Alternativ 2: Manuell

  1. Beräkna hashvärdena för utfärdare och innehavare i version 2. Se Beräkna utfärdarens och subjektets hashvärden.

  2. Lägg till ett nytt FIC med formatet för ämnesidentifierare i version 2 (steg 3).

  3. Uppdatera den hanterade identitetsposten till version 2:

    PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>)
    
    { "version": 2 }
    
  4. Utlös plugin-programmet och verifiera att tokenförvärvet lyckas.

  5. Ta bort den gamla version 1 FIC.

Anmärkning

Version 0 är inaktuell. CLI-stöd för att generera version 2 FIC pågår.

Reference

Hämta det kodade klient-ID:t

Det kodade klient-ID:t är klient-GUID:t som konverteras till byte och kodas som Base64URL (inte standardBas64):

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

Generera ett självsignerat certifikat

Endast för utveckling eller testning:

$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

Beräkna den självsignerade {hash} (SHA-256 över .cer. Exportera först från en .pfx om det behövs):

CertUtil -hashfile <CertificateFilePath> SHA256

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

Specialiserade Azure-molnmiljöer

Ange målgrupp, utfärdar-URL och ämnesprefix explicit när du distribuerar utanför det offentliga molnet, GCC och den första lanseringsstationen i GCC.

Moln Målgrupp Utfärdar-URL Ämnesprefix
GCC High och DoD api://AzureADTokenExchangeUSGov https://login.microsoftonline.us /eid1/c/usg
Mooncake (Kina) api://AzureADTokenExchangeChina https://login.partner.microsoftonline.cn /eid1/c/chn
US National (USNAT) api://AzureADTokenExchangeUSNat https://login.microsoftonline.eaglex.ic.gov /eid1/c/uss
US Secure (USSec) api://AzureADTokenExchangeUSSec https://login.microsoftonline.scloud /eid1/c/usn

Anmärkning

Målgruppsvärdet är skiftlägeskänsligt. För offentliga moln, GCC och den första lanseringsstationen i GCC är standardvärdena Audience api://AzureADTokenExchange, Issuer https://login.microsoftonline.com, Subject prefix /eid1/c/pub.

Vanliga frågor (FAQ)

Hur löser jag AADSTS700213: Ingen matchande federerad identitetspost hittades?

Ämnesidentifieraren som beräknas vid körningstillfället matchar ingen FIC i appen. Kontrollera följande:

  1. Du har konfigurerat och sparat FIC.
  2. Utfärdaren och ämnet matchar formatet i steg 3. Du kan också hitta det förväntade formatet i felstacken.
  3. Posten version är 2 och FIC använder hash-formatet version 2.
  4. Hashen beräknas utifrån körmiljöns DN-sträng (X509Certificate2.Issuer / X509Certificate2.Subject).
  5. Utfärdaren är https://login.microsoftonline.com/{tenantId}/v2.0 och målgruppen är api://AzureADTokenExchange (skiftlägeskänslig).

Hur löser jag AADSTS70050: Sökvägen för federerad hanterad identitet är inte korrekt formaterad?

Ämnesidentifieraren innehåller tecken som identitetsprovidern inte accepterar – oftast icke-ASCII-tecken i certifikatets CN under version 1. Version 2 genererar en ASCII-endast ämnesidentifierare och löser det här felet.

Hur löser jag felet "Det går inte att nå eller ansluta till Power Platform"?

Information om hur du säkerställer att Power Platform-slutpunkter kan nås och finns med i tillåtelselistan finns i URL:er och IP-adressintervall för Power Platform.