Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn Sie verwaltete Power Platform-Identität verwenden, können Dataverse-Plug-Ins oder Plug-In-Pakete eine Verbindung mit Azure Ressourcen herstellen, ohne Anmeldeinformationen zu verwalten. In diesem Artikel wird das empfohlene Setup (Version 2) beschrieben, das die Verbundidentitätsanmeldeinformationen (FIC) aus einem Hash des vollständigen Distinguished Name (DN) des Zertifikats erstellt.
Note
Verwenden Sie für alle neuen und bestehenden Plug-Ins die verwaltete Identität von Power Platform, Version 2. Wenn Sie ein Plug-In verwalten, das weiterhin das Format der Version 1 (CN-basiert) verwendet, finden Sie weitere Informationen unter Verwaltete Identität, Version 1, einrichten. Informationen zum Verschieben eines vorhandenen Plug-Ins zu Version 2 finden Sie unter Upgrade auf Version 2.
Warum Version 2
Version 2 erzeugt einen Antragstellerbezeichner fester Länge, der nur aus ASCII-Zeichen besteht, sodass er mit jedem Zertifikatsnamen verwendet werden kann. Version 1 schlägt bei bestimmten Zertifikatnamen (CNs) fehl:
-
Nicht-ASCII-Zeichen im CN (z. B. Akzentbuchstaben) →
AADSTS70050: The Federated Managed Identity path is not properly formatted. -
Kommas im CN (z. B.
CN=Contoso, Inc.) →AADSTS700213: No matching federated identity record found.
Voraussetzungen
- Ein Azure-Abonnement mit Zugriff auf die Bereitstellung von vom Benutzer zugewiesener verwalteter Identität (UAMI) oder Anwendungsregistrierung.
- Tools für Plug-Ins oder Plug-In-Pakete:
- Integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) wie Visual Studio zum Erstellen von Plug-Ins
- Plug-in Registration Tool
- SignTool.exe (Signiertool),, um die Plug-In-Assembly zu signieren
- Power Platform CLI
- Ein gültiges Zertifikat zum Signieren der Plug-In-Assembly.
Einrichten einer verwalteten Identität
- Erstellen Sie eine neue App-Registrierung oder eine benutzerseitig zugewiesene verwaltete Identität.
- Erstellen, Signieren und Registrieren des Plug-Ins.
- Konfigurieren Sie die Verbundidentitätsanmeldeinformationen.
- Erstellen Sie den verwalteten Identitätsdatensatz in Dataverse.
- Gewähren des Zugriffs auf die Azure-Ressource.
- Überprüfen Sie die Integration.
Schritt 1: Erstellen einer App-Registrierung oder einer vom Benutzer zugewiesenen verwalteten Identität
Erstellen Sie entweder eine vom Benutzer zugewiesene verwaltete Identität oder eine Anwendung in Microsoft Entra ID:
- Verwenden Sie für eine app-Identität, die dem Plug-In zugeordnet ist (sodass Sie Azure Richtlinien anwenden können), die Anwendungsregistrierung.
- Stellen Sie für einen Dienstprinzipal eine vom Benutzer zugewiesene verwaltete Identität bereit.
Note
Erfassen Sie die Anwendungs-ID (Client- und Mandanten-ID ) – Sie verwenden sie in späteren Schritten.
Schritt 2: Erstellen, Signieren und Registrieren des Plug-Ins
Erstellen Sie ein Plug-In in Visual Studio. Verwenden Sie die Mandanten-ID aus Schritt 1 und einen Bereich wie
https://{OrgName}.crm*.dynamics.com/.default. Verwenden Sie IManagedIdentityService , um ein Token anzufordern:string AcquireToken(IEnumerable<string> scopes);Signieren Sie das Plug-In mit Ihrem Zertifikat.
Plug-In-Paket (NuGet):
nuget sign YourPlugin.nupkg ` -CertificatePath MyCert.pfx ` -CertificatePassword "MyPassword" ` -Timestamper http://timestamp.digicert.comPlug-in-Montage (SignTool):
signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dllRegistrieren Sie das Plug-In mithilfe des Plug-In-Registrierungstools.
Note
Verwenden Sie ein selbstsigniertes Zertifikat nur für Entwicklung oder Tests. Verwenden Sie keine selbstsignierten Zertifikate in der Produktion. Informationen zum Erstellen eines Zertifikats finden Sie unter Generieren eines selbstsignierten Zertifikats.
Schritt 3: Konfigurieren der Verbundidentitäts-Anmeldeinformationen
Öffnen Sie im Azure-Portal Ihre App oder Ihre benutzerseitig zugewiesene verwaltete Identität (UAMI), wechseln Sie zu Zertifikate & Geheimnisse>Verbundanmeldeinformationen>Anmeldeinformationen hinzufügen, und wählen Sie Anderer Aussteller aus. Geben Sie dann Folgendes ein:
Emittent —
https://login.microsoftonline.com/{tenantID}/v2.0Typ — Expliziter Subjektbezeichner
Subjektbezeichner — verwenden Sie das Format für Ihren Zertifikattyp:
Vertrauenswürdiges Ausstellerzertifikat (Produktion):
/eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuerHash}/s/{subjectHash}Selbstsigniertes Zertifikat (nur Entwicklung):
/eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/h/{hash}
Segmentreferenz
Segment Description eid1Identitätsformatversion c/pubCloud-Code für öffentliche Cloud, GCC und erste Release-Station in GCC t/{encodedTenantId}Mandanten-ID. Siehe Abrufen der codierten Mandanten-ID a/qzXoWDkuqUa3l6zM5mM0Rw/Nur interne Verwendung. Nicht ändern n/pluginPlug-In-Komponente e/{environmentId}Umgebungs-ID i/{issuerHash}s/{subjectHash}SHA-256 Base64URL-Hash des vollständigen Ausstellers/Betreffs DN. Siehe Issuer- und Subject-Hashes berechnen h/{hash}SHA-256 des Zertifikats (nur selbstsigniert)
Aussteller- und Subjekt-Hash berechnen
Bilden Sie den SHA-256-Hash der vollständigen DN-Zeichenfolgen des Ausstellers und des Subjekts, wie sie im Zertifikat erscheinen, und kodieren Sie jede davon als URL-sicheres Base64. Abrufen der DN-Zeichenfolgen mit:
$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
Write-Host "Issuer: $($cert.Issuer)"
Write-Host "Subject: $($cert.Subject)"
Berechnen der 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"
Oder in 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('=');
}
Die Ausgabe ist eine 43-stellige Zeichenfolge, die nur A-Z, a-z, 0-9, - und _ enthält.
Important
Verwenden Sie die exakte DN-Zeichenfolge, die von der Runtime verwendet wird (die .NET-Eigenschaften X509Certificate2.Issuer und X509Certificate2.Subject). Ein anders formatierter DN stimmt nicht überein und führt zu einem Fehler mit AADSTS700213.
Note
Legen Sie für Bereitstellungen außerhalb der öffentlichen Cloud cloudspezifische Werte fest. Weitere Informationen finden Sie unter "Spezialisierte Azure Cloudumgebungen".
Schritt 4: Erstellen des verwalteten Identitätsdatensatzes in Dataverse
Senden Sie eine HTTP POST-Anforderung mithilfe eines REST-Clients. Für Version 2 setzen Sie version auf 2.
POST https://<<orgURL>>/api/data/v9.0/managedidentities
{
"applicationid": "<<appId>>",
"managedidentityid": "<<anyGuid>>",
"credentialsource": 2,
"subjectscope": 1,
"tenantid": "<<tenantId>>",
"version": 2
}
Verknüpfen Sie dann die Plug-In-Assembly (oder das Paket) mit dem Datensatz:
PATCH https://<<orgURL>>/api/data/v9.0/pluginassemblies(<<PluginAssemblyId>>)
{
"managedidentityid@odata.bind": "/managedidentities(<<ManagedIdentityGuid>>)"
}
Verwenden Sie pluginpackages(<<PluginPackageId>>) stattdessen für ein Plug-In-Paket.
Schritt 5: Gewähren des Zugriffs auf die Azure-Ressource
Gewähren Sie der Anwendung oder der vom Benutzer zugewiesenen verwalteten Identität Zugriff auf die benötigten Azure Ressource, z. B. Azure Key Vault.
Schritt 6: Überprüfen der Integration
Starten Sie das Plug-in und bestätigen Sie, dass es ein Token erhält und ohne gesonderte Anmeldeinformationen auf die Azure-Ressource zugreifen kann.
Upgrade auf Version 2
Wenn Sie über ein Plug-In mit Version 0 oder Version 1 verfügen, können Sie es auf Version 2 verschieben, ohne das Plug-In neu zu erstellen oder erneut zu registrieren.
Option 1: Power Platform CLI
Note
Die verwalteten CLI-Identitätsverben funktionieren nicht auf Linux-basierten Betriebssystemen oder mit vom Benutzer zugewiesener verwalteter Identität (UAMI). Wenn die CLI für Ihr Zertifikat nicht funktioniert, verwenden Sie Option 2: Manuell.
- Installieren Sie Power Platform CLI, Version 2.8.1 oder höher. Siehe Installieren Microsoft Power Platform CLI.
- Erstellen Eines Authentifizierungsprofils:
pac auth create - Überprüfen Sie die aktuelle Version:
pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2 - Upgrade:
pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm - Aktivieren Sie das Plug-in, um die Validierung durchzuführen.
Option 2: Manuell
Berechnen Sie die Hashes von Aussteller und Subjekt der Version 2. Siehe die Berechnung der Aussteller- und Subjekt-Hashes.
Fügen Sie ein neues FIC mit dem Subjektbezeichnerformat der Version 2 (Schritt 3) hinzu.
Aktualisieren sie den verwalteten Identitätsdatensatz auf Version 2:
PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>){ "version": 2 }Starten Sie das Plug-In, und überprüfen Sie, ob das Abrufen des Tokens erfolgreich ist.
Entfernen Sie die alte Version 1 FIC.
Note
Version 0 ist veraltet. Die CLI-Unterstützung zum Generieren von FIC Version 2 wird derzeit entwickelt.
Reference
Rufen Sie die codierte Mandanten-ID ab
Die codierte Mandanten-ID ist die Mandanten-GUID, die in Bytes konvertiert und als Base64URL codiert wird (nicht als Base64-Standard):
$tenantId = "<your-tenant-guid>"
$tenantGuid = [System.Guid]::Parse($tenantId)
$tenantBytes = $tenantGuid.ToByteArray()
$base64 = [System.Convert]::ToBase64String($tenantBytes)
$encodedTenantId = $base64.Replace('+', '-').Replace('/', '_').TrimEnd('=')
$encodedTenantId
Generieren eines selbstsignierten Zertifikats
Nur für Entwicklung oder Tests:
$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
Berechnen Sie die selbstsignierte {hash} (SHA-256 über .cer; falls nötig, exportieren Sie es zuerst aus einem .pfx):
CertUtil -hashfile <CertificateFilePath> SHA256
$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
$cert.RawData | Set-Content -Encoding Byte -Path "extracted.cer"
Spezialisierte Azure-Cloudumgebungen
Legen Sie das Präfix "Zielgruppe", "Aussteller-URL" und " Betreff" explizit fest, wenn Sie außerhalb der öffentlichen Cloud, GCC und der ersten Veröffentlichungsstation in GCC bereitstellen.
| Wolke | Zielgruppe | Aussteller-URL | Betreffpräfix |
|---|---|---|---|
| GCC High und DoD | api://AzureADTokenExchangeUSGov |
https://login.microsoftonline.us |
/eid1/c/usg |
| Mooncake (Mondkuchen aus China) | 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 |
Note
Bei dem Wert " Zielgruppe " wird die Groß-/Kleinschreibung beachtet. Für öffentliche Cloud, GCC und first release station in GCC sind die Standardwerte Audience api://AzureADTokenExchange, Issuer https://login.microsoftonline.com, Subject prefix /eid1/c/pub.
Häufig gestellte Fragen (FAQs)
Wie behebe ich AADSTS700213: Es wurde kein übereinstimmender Verbundidentitätsdatensatz gefunden?
Der zur Laufzeit berechnete Subjektbezeichner stimmt mit keinem FIC in der App überein. Überprüfen Sie Folgendes:
- Sie haben den FIC konfiguriert und gespeichert.
- Der Aussteller und der Betreff stimmen mit dem Format in Schritt 3 überein. Sie können auch das erwartete Format im Fehlerstapel finden.
- Der Datensatz
versionist2und der FIC verwendet das Hashformat der Version 2. - Der Hash wird aus der DN-Zeichenfolge (
X509Certificate2.Issuer/X509Certificate2.Subject) der Laufzeit berechnet. - Der Aussteller ist
https://login.microsoftonline.com/{tenantId}/v2.0und die Zielgruppe istapi://AzureADTokenExchange(Groß-/Kleinschreibung beachten).
Wie behebt ich AADSTS70050: Der Pfad der verwalteten Verbundidentität ist nicht ordnungsgemäß formatiert?
Der Subjektbezeichner enthält Zeichen, die der Identitätsanbieter nicht akzeptiert – meistens nicht-ASCII-Zeichen im CN des Zertifikats der Version 1. Version 2 erzeugt einen nur ASCII-Zeichen enthaltenden Subjektbezeichner und behebt dadurch diesen Fehler.
Wie kann ich den Fehler "Keine Verbindung mit Power Platform herstellen" beheben?
Informationen dazu, dass Power Platform-Endpunkte erreichbar und zugelassen sind, finden Sie unter Power Platform-URLs und IP-Adressbereiche.