Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lorsque vous utilisez l’identité managée Power Platform, les plug-ins Dataverse ou les packages de plug-ins peuvent se connecter à des ressources Azure sans gérer les informations d’identification. Cet article décrit la configuration recommandée (version 2), qui génère les informations d’identification d’identité fédérée (FIC) à partir d’un hachage du nom unique complet (DN) du certificat.
Note
Utilisez l’identité managée Power Platform version 2 pour tous les plug-ins nouveaux et existants. Si vous conservez un plug-in qui utilise toujours le format version 1 (cn), consultez Configurer l’identité managée version 1. Pour déplacer un plug-in existant vers la version 2, consultez Mettre à niveau vers la version 2.
Pourquoi la version 2
La version 2 produit un identificateur d’objet ASCII de longueur fixe. Il fonctionne donc avec n’importe quel nom de certificat. La version 1 échoue sur certains noms de certificats (CN) :
-
Caractères non ASCII dans le CN (par exemple, lettres accentuées) →
AADSTS70050: The Federated Managed Identity path is not properly formatted. -
Virgules dans le CN (par exemple,
CN=Contoso, Inc.) →AADSTS700213: No matching federated identity record found.
Prerequisites
- Un abonnement Azure avec accès pour provisionner l’identité managée affectée par l’utilisateur (UAMI) ou l’enregistrement d’application.
- Outils pour les plug-ins ou les packages de plug-ins :
- Environnement de développement intégré (IDE), comme Visual Studio, pour créer un plug-in
- Outil d’enregistrement de plug-in
- SignTool.exe (outil de signature) pour signer l’assemblage de plug-in
- Power Platform CLI
- Certificat valide pour signer l'assemblage du plug-in.
Configurer une identité managée
- Créez un enregistrement d’application ou une identité managée attribuée par l’utilisateur.
- Compilez, signez et enregistrez le plug-in.
- Configurez l’identifiant d’identité fédérée.
- Créez l’enregistrement d’identité managée dans Dataverse.
- Accordez l’accès à la ressource Azure.
- Validez l’intégration.
Étape 1 : Créer une inscription d’application ou une identité managée affectée par l’utilisateur
Créez une identité managée affectée par l’utilisateur ou une application dans Microsoft Entra ID :
- Pour une identité d’application associée au plug-in (pour que vous puissiez appliquer des stratégies Azure), utilisez l’inscription d’application.
- Pour un principal de service, provisionnez une identité managée affectée par l’utilisateur.
Note
Capturez l’ID d’application (client) et l’ID de locataire . Vous les utilisez dans les étapes ultérieures.
Étape 2 : Générer, signer et inscrire le plug-in
Créez un plug-in Visual Studio. Utilisez l’ID du locataire de l’étape 1 et un scope comme
https://{OrgName}.crm*.dynamics.com/.default. Utilisez IManagedIdentityService pour demander un jeton :string AcquireToken(IEnumerable<string> scopes);Connectez le plug-in avec votre certificat.
Package de plug-in (NuGet) :
nuget sign YourPlugin.nupkg ` -CertificatePath MyCert.pfx ` -CertificatePassword "MyPassword" ` -Timestamper http://timestamp.digicert.comAssemblage du module d’extension (SignTool) :
signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dllEnregistrez le module externe à l’aide de l’outil d’enregistrement du module externe.
Note
Utilisez un certificat auto-signé uniquement pour le développement ou le test. N’utilisez pas de certificats auto-signés en production. Pour en créer un, consultez Générer un certificat auto-signé.
Étape 3 : Configurer les informations d’identification de l’identité fédérée
Dans le portail Azure, ouvrez votre application ou l’identité managée affectée par l’utilisateur (UAMI), accédez à Certificats et secrets> Desinformations d’identification fédérées Ajouter des>informations d’identification, puis sélectionnez Autre émetteur. Entrez ensuite :
Émetteur —
https://login.microsoftonline.com/{tenantID}/v2.0Type — Identificateur d’objet explicite
Identificateur de l’objet : utilisez le format de votre type de certificat :
Certificat d’émetteur de confiance (production) :
/eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuerHash}/s/{subjectHash}Certificat auto-signé (développement uniquement) :
/eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/h/{hash}
Référence de segment
Segment Description eid1Version du format d’identité c/pubCode cloud pour le cloud public, le cloud de la communauté du secteur public (GCC) et la station de première publication dans GCC t/{encodedTenantId}ID de locataire. Voir Obtenir l’ID de locataire encodé a/qzXoWDkuqUa3l6zM5mM0Rw/Utilisation interne uniquement. Ne modifiez pas n/pluginComposant de module d'extension e/{environmentId}ID environnement i/{issuerHash}s/{subjectHash}Hachage SHA-256 Base64URL du DN complet de l’émetteur/du sujet. Voir Calculer les hachages de l’émetteur et du sujet h/{hash}SHA-256 du certificat (auto-signé uniquement)
Calculer les hachages de l’émetteur et du sujet
Prenez le hachage SHA-256 de l’émetteur complet et des chaînes DN d’objet telles qu’elles apparaissent sur le certificat et encodez-les sous forme d’URL-safe Base64. Obtenez les chaînes DN avec :
$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
Write-Host "Issuer: $($cert.Issuer)"
Write-Host "Subject: $($cert.Subject)"
Calculez les hachages (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"
Ou 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 sortie est une chaîne de 43 caractères contenant uniquement A-Z, , a-z0-9, -et _.
Important
Utilisez la chaîne DN exacte utilisée par l’environnement d’exécution (les propriétés .NET X509Certificate2.Issuer et X509Certificate2.Subject). Un nom de domaine au format différent ne correspond pas et échoue avec AADSTS700213.
Note
Pour les déploiements en dehors du cloud public, définissez des valeurs spécifiques au cloud. Consultez les environnements cloud Azure spécialisés.
Étape 4 : Créer l’enregistrement d’identité managée dans Dataverse
Envoyez une requête HTTP POST à l’aide d’un client REST. Pour la version 2, définissez version sur 2.
POST https://<<orgURL>>/api/data/v9.0/managedidentities
{
"applicationid": "<<appId>>",
"managedidentityid": "<<anyGuid>>",
"credentialsource": 2,
"subjectscope": 1,
"tenantid": "<<tenantId>>",
"version": 2
}
Ensuite, liez l’assembly de plug-in (ou package) à l’enregistrement :
PATCH https://<<orgURL>>/api/data/v9.0/pluginassemblies(<<PluginAssemblyId>>)
{
"managedidentityid@odata.bind": "/managedidentities(<<ManagedIdentityGuid>>)"
}
Pour un package de plug-in, utilisez pluginpackages(<<PluginPackageId>>) plutôt.
Étape 5 : Accorder l’accès à la ressource Azure
Accordez à l’application ou à l’identité managée affectée par l’utilisateur l’accès à la ressource Azure dont elle a besoin, par exemple Azure Key Vault.
Étape 6 : Valider l’intégration
Déclenchez le plug-in et confirmez qu’il acquiert un jeton et atteint la ressource Azure sans informations d’identification distinctes.
Mettre à niveau vers la version 2
Si vous disposez d’un plug-in sur la version 0 ou la version 1, vous pouvez le déplacer vers la version 2 sans regénérer ou réinscrire le plug-in.
Option 1 : Power Platform CLI
Note
Les commandes CLI relatives aux identités managées ne fonctionnent pas sur les systèmes d’exploitation Linux ni avec les identités managées affectées par l’utilisateur (UAMI). Si l’interface CLI ne fonctionne pas pour votre certificat, utilisez l’option 2 : Manuel.
- Installez Power Platform CLI version 2.8.1 ou ultérieure. Consultez Installer Microsoft Power Platform CLI.
- Créez un profil d’authentification :
pac auth create - Vérifiez la version actuelle :
pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2 - Mettre à niveau :
pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm - Déclenchez le plug-in pour valider.
Option 2 : Manuel
Calculer les hachages de l’émetteur et du sujet en version 2. Voir Calculer les hachages de l’émetteur et du sujet.
Ajoutez un nouveau FIC au format d’identificateur d’objet version 2 (étape 3).
Mettez à jour l’enregistrement d’identité managée vers la version 2 :
PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>){ "version": 2 }Déclenchez le plug-in et vérifiez que l’acquisition de jeton réussit.
Supprimez l’ancienne version 1 FIC.
Note
La version 0 est déconseillée. La prise en charge en ligne de commande pour générer le FIC version 2 est en cours de développement.
Reference
Obtenir l’ID de locataire encodé
L’ID de locataire encodé est le GUID du locataire converti en octets et encodé en base64URL (et non en 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
Générer un certificat auto-signé
Pour le développement ou les tests uniquement :
$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
Calculez le certificat auto-signé {hash} (SHA-256 du .cer ; exportez-le d’abord depuis un .pfx, si nécessaire) :
CertUtil -hashfile <CertificateFilePath> SHA256
$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
$cert.RawData | Set-Content -Encoding Byte -Path "extracted.cer"
Environnements cloud Azure spécialisés
Définissez l’audience, l’URL de l’émetteur et le préfixe Objet explicitement lors du déploiement en dehors du cloud public, du GCC et de la première station de publication dans GCC.
| Cloud | Audience | URL de l’émetteur | Préfixe de l’objet |
|---|---|---|---|
| GCC High et DoD | api://AzureADTokenExchangeUSGov |
https://login.microsoftonline.us |
/eid1/c/usg |
| Mooncake (Chine) | 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
La valeur Audience respecte la casse. Pour le cloud public, le cloud de la communauté du secteur public (GCC) et la station de première publication dans GCC, les valeurs par défaut sont Audience api://AzureADTokenExchange, Émetteur https://login.microsoftonline.com, Préfixe d’objet /eid1/c/pub.
Questions Fréquemment Posées (FAQ)
Comment résoudre AADSTS700213 : aucun enregistrement d’identité fédérée correspondant trouvé ?
L’identificateur de l’objet calculé au moment de l’exécution ne correspond à aucun FIC sur l’application. Vérifiez les éléments suivants :
- Vous avez configuré et enregistré le FIC.
- L’émetteur et l’objet correspondent au format de l’étape 3. Vous pouvez également trouver le format attendu dans la pile d’erreurs.
- L’enregistrement
versionest2et le FIC utilise le format de hachage version 2. - Le hachage est calculé à partir de la chaîne DN du runtime (
X509Certificate2.Issuer/X509Certificate2.Subject). - L’émetteur est
https://login.microsoftonline.com/{tenantId}/v2.0et l’audience estapi://AzureADTokenExchange(sensible à la casse).
Comment résoudre AADSTS70050 : le chemin d’accès de l’identité managée fédérée n’est pas correctement mis en forme ?
L’identificateur de l’objet contient des caractères que le fournisseur d’identité n’accepte pas , le plus souvent des caractères non ASCII dans le certificat CN sous la version 1. La version 2 génère un identificateur d’objet ASCII uniquement et résout cette erreur.
Comment résoudre l’erreur « Impossible d’atteindre ou de se connecter à Power Platform » ?
Consultez URL Power Platform et plages d’adresses IP pour vous assurer que les points de terminaison Power Platform sont accessibles et autorisés.