Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
- En Azure-prenumeration med åtkomst till etablering av användartilldelad hanterad identitet (UAMI) eller programregistrering.
- Verktyg för plugin-program eller plugin-paket:
- Integrerad utvecklingsmiljö (IDE), som Visual Studio, för att skapa plugin-program
- Verktyget för registrering av plugin-program
- SignTool.exe (signeringsverktyget) för att signera plugin-programpaketet
- Power Platform CLI
- Ett giltigt certifikat för att signera plugin-sammansättningen.
Konfigurera hanterad identitet
- Skapa en ny appregistrering eller användartilldelad hanterad identitet.
- Skapa, logga in och registrera plugin-programmet.
- Konfigurera autentiseringsuppgiften för federerad identitet.
- Skapa den hanterade identitetsposten i Dataverse.
- Bevilja åtkomst till Azure resursen.
- 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:
- Använd programregistrering för en appidentitet som är associerad med plugin-programmet (så att du kan tillämpa Azure principer).
- För ett tjänstens huvudkonto etablerar du en användartilldelad hanterad identitet.
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
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);Logga in plugin-programmet med ditt certifikat.
Plugin-paket (NuGet):
nuget sign YourPlugin.nupkg ` -CertificatePath MyCert.pfx ` -CertificatePassword "MyPassword" ` -Timestamper http://timestamp.digicert.comSammansättning av plugin-program (SignTool):
signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dllRegistrera 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ärdare –
https://login.microsoftonline.com/{tenantID}/v2.0Typ — Uttrycklig 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 eid1Identitetsformatversion c/pubMolnkod 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/pluginPlugin-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.
- Installera Power Platform CLI version 2.8.1 eller senare. Se Installera Microsoft Power Platform CLI.
- Skapa en autentiseringsprofil:
pac auth create - Kontrollera den aktuella versionen:
pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2 - Uppgradera:
pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm - Utlös plugin-programmet för att verifiera.
Alternativ 2: Manuell
Beräkna hashvärdena för utfärdare och innehavare i version 2. Se Beräkna utfärdarens och subjektets hashvärden.
Lägg till ett nytt FIC med formatet för ämnesidentifierare i version 2 (steg 3).
Uppdatera den hanterade identitetsposten till version 2:
PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>){ "version": 2 }Utlös plugin-programmet och verifiera att tokenförvärvet lyckas.
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:
- Du har konfigurerat och sparat FIC.
- Utfärdaren och ämnet matchar formatet i steg 3. Du kan också hitta det förväntade formatet i felstacken.
- Posten
versionär2och FIC använder hash-formatet version 2. - Hashen beräknas utifrån körmiljöns DN-sträng (
X509Certificate2.Issuer/X509Certificate2.Subject). - Utfärdaren är
https://login.microsoftonline.com/{tenantId}/v2.0och målgruppen ärapi://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.