Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Quando usa identidade gerida do Power Platform, os plug-ins ou pacotes de plug-ins do Dataverse podem ligar-se a recursos do Azure sem gerir credenciais. Este artigo descreve a configuração recomendada (versão 2), que constrói a credencial de identidade federada (FIC) a partir de um hash do Nome Distinto (DN) completo do certificado.
Observação
Use a versão 2 da identidade gerida do Power Platform para todos os plug-ins novos e existentes. Se mantiver um plug-in que ainda utilize o formato da versão 1 (baseado em CN), veja Configurar identidade gerida versão 1. Para mover um plug-in existente para a versão 2, veja Atualizar para a versão 2.
Porquê a versão 2
A versão 2 produz um identificador de sujeito de comprimento fixo, apenas ASCII, pelo que funciona com qualquer nome de certificado. A versão 1 falha em certos nomes de certificados (CNs):
-
Caracteres não ASCII no CN (por exemplo, letras com acento) →
AADSTS70050: The Federated Managed Identity path is not properly formatted. -
Vírgulas no CN (por exemplo,
CN=Contoso, Inc.) →AADSTS700213: No matching federated identity record found.
Pré-requisitos
- Uma subscrição do Azure com acesso ao aprovisionamento da identidade gerida atribuída pelo utilizador (UAMI) ou registo de aplicação.
- Ferramentas para plug-ins ou pacotes de plug-in:
- Ambiente de Desenvolvimento Integrado (IDE), como o Visual Studio, para construir plug-ins
- Ferramenta de registo de plug-ins
- SignTool.exe (Ferramenta de Assinatura) para assinar a assemblagem do plug-in
- Power Platform CLI
- Um certificado válido para assinar a assemblagem do plug-in.
Configurar identidade gerenciada
- Crie um novo registo de aplicação ou uma identidade gerida atribuída pelo utilizador.
- Constrói, assina e regista o plug-in.
- Configura a credencial de identidade federada.
- Crie o registo de identidade gerida no Dataverse.
- Conceda acesso ao recurso Azure.
- Valida a integração.
Passo 1: Criar um registo de aplicação ou uma identidade gerida atribuída pelo utilizador
Crie uma identidade gerida atribuída pelo utilizador ou uma aplicação no Microsoft Entra ID:
- Para uma identidade de aplicação associada ao plug-in (para poderes aplicar políticas do Azure), usa o registo da aplicação.
- Para um principal de serviço, aprovisione uma identidade gerida atribuída pelo utilizador.
Observação
Anote o ID da aplicação (cliente) e o ID do inquilino — irá utilizá-los em passos posteriores.
Passo 2: Construir, assinar e registar o plug-in
Cria um plug-in no Visual Studio. Use o ID do inquilino do passo 1 e um âmbito como
https://{OrgName}.crm*.dynamics.com/.default. Use IManagedIdentityService para solicitar um token:string AcquireToken(IEnumerable<string> scopes);Assine digitalmente o plug-in com o seu certificado.
Pacote de plug-in (NuGet):
nuget sign YourPlugin.nupkg ` -CertificatePath MyCert.pfx ` -CertificatePassword "MyPassword" ` -Timestamper http://timestamp.digicert.comInstalação do plug-in (SignTool):
signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dllRegiste o plug-in usando a ferramenta de registo do plug-in.
Observação
Use um certificado auto-assinado apenas para desenvolvimento ou testes. Não uses certificados autoassinados na produção. Para criar uma, veja Gerar um certificado auto-assinado.
Passo 3: Configurar a credencial de identidade federada
No portal do Azure, abra a sua aplicação ou identidade gerida atribuída a utilizador (UAMI), vá a Certificados e segredos>Credenciais federadas>Adicionar credencial e selecione Outro emissor. Em seguida, digite:
Emitente —
https://login.microsoftonline.com/{tenantID}/v2.0Tipo — Identificador explícito de assunto
Identificador de assunto — use o formato para o seu tipo de certificado:
Certificado de emissor confiável (produção):
/eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuerHash}/s/{subjectHash}Certificado autoassinado (apenas para desenvolvimento):
/eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/h/{hash}
Referência do segmento
Segmento Description eid1Versão do formato de identidade c/pubCódigo para nuvem pública, GCC e primeira estação de disponibilização no GCC t/{encodedTenantId}ID do inquilino. Consulte Obter o ID de tenant codificado a/qzXoWDkuqUa3l6zM5mM0Rw/Apenas para uso interno. Não modifiquem n/pluginComponente de extensão e/{environmentId}ID do Ambiente i/{issuerHash}s/{subjectHash}Hash SHA-256 em Base64URL do DN completo do emissor/do sujeito. Consulte Calcular os hashes do emitente e do titular h/{hash}SHA-256 do certificado (apenas auto-assinado)
Calcular os hashes do emissor e do assunto
Calcule o hash SHA-256 das cadeias DN completas do emissor e do sujeito, tal como aparecem no certificado, e codifique cada uma em Base64 segura para URL. Obtenha as cadeias DN com:
$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
Write-Host "Issuer: $($cert.Issuer)"
Write-Host "Subject: $($cert.Subject)"
Calcule os valores de hash (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 em 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('=');
}
A saída é uma cadeia de 43 caracteres contendo apenas A-Z, a-z, 0-9, -, e _.
Importante
Utilize a cadeia DN exata que o runtime utiliza (as propriedades X509Certificate2.Issuer e X509Certificate2.Subject do .NET). Um DN formatado de forma diferente não corresponde e falha com AADSTS700213.
Observação
Para implementações fora da cloud pública, defina valores específicos da cloud. Consulte Ambientes cloud especializados do Azure.
Passo 4: Criar o registo de identidade gerida no Dataverse
Envie um pedido HTTP POST usando um cliente REST. Para a versão 2, defina version para 2.
POST https://<<orgURL>>/api/data/v9.0/managedidentities
{
"applicationid": "<<appId>>",
"managedidentityid": "<<anyGuid>>",
"credentialsource": 2,
"subjectscope": 1,
"tenantid": "<<tenantId>>",
"version": 2
}
Depois, vincule o conjunto do plug-in (ou pacote) ao registo:
PATCH https://<<orgURL>>/api/data/v9.0/pluginassemblies(<<PluginAssemblyId>>)
{
"managedidentityid@odata.bind": "/managedidentities(<<ManagedIdentityGuid>>)"
}
Para um pacote plug-in, use pluginpackages(<<PluginPackageId>>) em vez disso.
Passo 5: Conceder acesso ao recurso Azure
Conceda à aplicação ou à identidade gerida atribuída pelo utilizador acesso ao recurso Azure de que necessita, como o Azure Key Vault.
Passo 6: Validar a integração
Ativa o plug-in e confirma que adquiriu um token e chega ao recurso Azure sem credenciais separadas.
Atualização para a versão 2
Se tiveres um plug-in na versão 0 ou 1, podes movê-lo para a versão 2 sem reconstruir ou registar novamente o plug-in.
Opção 1: CLI da Power Platform
Observação
Os verbos de identidade gerida pela CLI não funcionam em sistemas operativos baseados em Linux nem com identidade gerida atribuída pelo utilizador (UAMI). Se a CLI não funcionar para o teu certificado, usa a Opção 2: Manual.
- Instale a CLI do Power Platform versão 2.8.1 ou posterior. Consulte Instalar Microsoft Power Platform CLI.
- Crie um perfil de autenticação:
pac auth create - Consulta a versão atual:
pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2 - Atualização:
pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm - Ative o plug-in para efetuar a validação.
Opção 2: Manual
Calcule os hashes do emissor e do assunto da versão 2. Veja Calcular os hashes do emissor e do assunto.
Adicione um novo FIC com o formato de identificador de assunto da versão 2 (Passo 3).
Atualize o registo de identidade gerida para a versão 2:
PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>){ "version": 2 }Acione o plug-in e verifique se a aquisição do token foi bem-sucedida.
Remova a versão antiga 1 do FIC.
Observação
A versão 0 está obsoleta. O suporte à CLI para gerar o FIC versão 2 está em progresso.
Reference
Obtenha o ID do inquilino codificado
O ID do tenant codificado é o GUID do tenant convertido em bytes e codificado como Base64URL (não Base64 padrão):
$tenantId = "<your-tenant-guid>"
$tenantGuid = [System.Guid]::Parse($tenantId)
$tenantBytes = $tenantGuid.ToByteArray()
$base64 = [System.Convert]::ToBase64String($tenantBytes)
$encodedTenantId = $base64.Replace('+', '-').Replace('/', '_').TrimEnd('=')
$encodedTenantId
Gerar um certificado autoassinado
Para desenvolvimento ou testes apenas:
$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
Calcule o certificado autoassinado {hash} (SHA-256 do .cer; exporte-o primeiro a partir de um .pfx, se necessário):
CertUtil -hashfile <CertificateFilePath> SHA256
$cert = Get-PfxCertificate -FilePath "path\to\your.pfx"
$cert.RawData | Set-Content -Encoding Byte -Path "extracted.cer"
Ambientes de nuvem especializados do Azure
Defina explicitamente o prefixo Audiência, URL do Emissor e Sujeito ao implementar fora da cloud pública, GCC e a primeira estação de lançamento no GCC.
| Cloud | Audiência | URL do emissor | Prefixo do assunto |
|---|---|---|---|
| GCC High e DoD | api://AzureADTokenExchangeUSGov |
https://login.microsoftonline.us |
/eid1/c/usg |
| Bolo da lua (China) | api://AzureADTokenExchangeChina |
https://login.partner.microsoftonline.cn |
/eid1/c/chn |
| Nacional dos EUA (USNAT) | api://AzureADTokenExchangeUSNat |
https://login.microsoftonline.eaglex.ic.gov |
/eid1/c/uss |
| Segurança dos EUA (USSec) | api://AzureADTokenExchangeUSSec |
https://login.microsoftonline.scloud |
/eid1/c/usn |
Observação
O valor da Audiência é sensível a maiúsculas e minúsculas. Para a cloud pública, GCC e a estação de primeira versão no GCC, os valores predefinidos são Audiência api://AzureADTokenExchange, Emissor https://login.microsoftonline.com e prefixo do assunto /eid1/c/pub.
Perguntas mais frequentes (FAQ)
Como resolvo AADSTS700213: Nenhum registo de identidade federado correspondente encontrado?
O identificador de assunto calculado em tempo de execução não corresponde a nenhum FIC da aplicação. Verifique se:
- Configuraste e guardaste o FIC.
- O emissor e o assunto correspondem ao formato do Passo 3. Você também pode encontrar o formato esperado na pilha de erros.
- O registo
versioné2e o FIC utiliza o formato de hash da versão 2. - O hash é calculado a partir da string DN do tempo de execução (
X509Certificate2.Issuer/X509Certificate2.Subject). - O emissor é
https://login.microsoftonline.com/{tenantId}/v2.0e o público éapi://AzureADTokenExchange(distintor de maiúsculas e minúsculas).
Como resolvo AADSTS70050: O caminho da Identidade Gerida Federada não está devidamente formatado?
O identificador de sujeito contém caracteres que o fornecedor de identidade não aceita — na maioria das vezes caracteres não ASCII no certificado CN da versão 1. A versão 2 produz um identificador do assunto composto apenas por caracteres ASCII e resolve este erro.
Como resolvo o erro "Não é possível alcançar ou conectar-se à Power Platform"?
Para garantir que os pontos finais do Power Platform estão acessíveis e incluídos na lista de permissões, consulte URLs e intervalos de endereços IP do Power Platform.