"Power Platform" valdomos tapatybės nustatymas "Dataverse" papildiniams arba priedų paketams

Kai naudojate "Power Platform" valdomą tapatybę, "Dataverse" priedai arba priedų paketai gali prisijungti prie "Azure" išteklių nevaldant kredencialų. Šiame straipsnyje aprašoma rekomenduojama (2 versija) sąranka, kuri sukuria susietosios tapatybės kredencialą (FIC) iš sertifikato viso skiriamojo vardo (DN) maišos.

Pastaba.

Naudokite "Power Platform" valdomos tapatybės 2 versiją visiems naujiems ir esamiems papildiniams. Jei prižiūrite priedą, kuris vis dar naudoja 1 versijos (CN) formatą, žr. Valdomosios tapatybės 1 versijos nustatymas. Norėdami perkelti esamą priedą į 2 versiją, žr. Naujinimas į 2 versiją.

Kodėl 2 versija

2 versija sukuria fiksuoto ilgio, tik ASCII subjekto identifikatorių, todėl jis veikia su bet kokiu sertifikato pavadinimu. 1 versija nepavyksta tam tikruose sertifikatų pavadinimuose (KN):

  • Ne ASCII simboliai KN (pvz., kirčiuotos raidės) → AADSTS70050: The Federated Managed Identity path is not properly formatted.
  • Kableliai KN (pvz., CN=Contoso, Inc.) → AADSTS700213: No matching federated identity record found.

Būtinosios sąlygos

  • "Azure" prenumerata su prieiga prie vartotojo priskirtos valdomosios tapatybės (UAMI) arba programos registracijos nustatymo.
  • Įskiepių arba priedų paketų įrankiai:
  • Galiojantis priedo rinkinio pasirašymo sertifikatas.

Nustatyti valdomą tapatybę

  1. Sukurkite naują programos registraciją arba vartotojo priskirtą valdomą tapatybę.
  2. Sukurkite, pasirašykite ir užregistruokite priedą.
  3. Konfigūruokite susietosios tapatybės kredencialus.
  4. Sukurkite valdomos tapatybės įrašą "Dataverse".
  5. Suteikti prieigą prie "Azure" ištekliaus.
  6. Patikrinkite integraciją.

1 veiksmas: programos registracijos arba vartotojo priskirtos valdomos tapatybės kūrimas

Sukurkite vartotojo priskirtą valdomą tapatybę arba programą Microsoft Entra ID:

Pastaba.

Užfiksuokite programos (kliento) ID ir nuomotojo ID – juos naudosite atlikdami vėlesnius veiksmus.

2 veiksmas: sukurkite, pasirašykite ir užregistruokite priedą

  1. Sukurkite priedą programoje "Visual Studio". Naudokite 1 veiksmo nuomotojo ID ir aprėptį, pvz. https://{OrgName}.crm*.dynamics.com/.default, . Naudokite IManagedIdentityService atpažinimo ženklo užklausai:

    string AcquireToken(IEnumerable<string> scopes);
    
  2. Pasirašykite priedą savo sertifikatu.

    Papildinio paketas (NuGet):

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

    Įskiepio rinkinys (SignTool):

    signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dll
    
  3. Užregistruokite priedą naudodami įskiepio registracijos įrankį.

Pastaba.

Naudokite savarankiškai pasirašytą sertifikatą tik kūrimui ar testavimui. Gamyboje nenaudokite savarankiškai pasirašytų sertifikatų. Norėdami jį sukurti, žr. Savarankiškai pasirašyto sertifikato generavimas.

3 veiksmas: jungtinės tapatybės kredencialų konfigūravimas

"Azure" portale atidarykite programą arba vartotojo priskirtą valdomąją tapatybę (UAMI), eikite į Sertifikatai ir paslaptys>>Įtraukti kredencialus ir pasirinkite Kitas išdavėjas. Tada įveskite:

  • Emitentashttps://login.microsoftonline.com/{tenantID}/v2.0

  • Tipasaiškus subjekto identifikatorius

  • Temos identifikatorius – naudokite sertifikato tipo formatą:

    • Patikimo išdavėjo sertifikatas (gamyba):

      /eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuerHash}/s/{subjectHash}
      
    • Savarankiškai pasirašytas sertifikatas (tik kūrimas):

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

    Segmento nuoroda

    Segmentas Aprašą
    eid1 Tapatybės formato versija
    c/pub Debesies kodas, skirtas viešajam debesiui, GCC ir pirmosios laidos stočiai GCC
    t/{encodedTenantId} Nuomininko ID. Žr . Užkoduoto nuomotojo ID gavimas
    a/qzXoWDkuqUa3l6zM5mM0Rw/ Tik vidinis naudojimas. Nemodifikuoti
    n/plugin Papildinio komponentas
    e/{environmentId} Aplinkos ID
    i/{issuerHash} s/{subjectHash} SHA-256 Base64URL viso emitento / subjekto DN maiša. Žr. Emitento ir temos maišos skaičiavimas
    h/{hash} Sertifikato SHA-256 (tik savarankiškai pasirašytas)

Emitento ir subjekto maišos skaičiavimas

Paimkite viso emitento ir subjekto DN eilučių SHA-256 maišą, kaip jos rodomos sertifikate, ir užkoduokite kiekvieną kaip URL saugią Base64. Gaukite DN eilutes su:

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

Apskaičiuokite maišas ("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"

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

Išvestis yra 43 simbolių eilutė, kurioje yra tik A-Z, a-z, 0-9, -ir _.

Svarbu

Naudokite tikslią vykdymo laiko DN eilutę (.NET X509Certificate2.Issuer ir X509Certificate2.Subject ypatybes). Kitaip suformatuotas DN nesutaps ir nepavyks su AADSTS700213.

Pastaba.

Jei diegiate ne viešajame debesyje, nustatykite debesies reikšmes. Žr. Specializuotos "Azure" debesies aplinkos.

4 veiksmas: valdomos tapatybės įrašo kūrimas "Dataverse"

Siųskite HTTP POST užklausą naudodami REST klientą. 2 versijoje nustatykite version .2

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

Tada susiekite priedo rinkinį (arba paketą) su įrašu:

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

Jei norite papildyti paketą, naudokite pluginpackages(<<PluginPackageId>>) vietoj.

5 veiksmas: suteikite prieigą prie "Azure" išteklių

Suteikite programai arba vartotojo priskirtai valdomai tapatybei prieigą prie jai reikalingų "Azure" išteklių, pvz., "Azure Key Vault".

6 veiksmas: patikrinkite integraciją

Suaktyvinkite priedą ir patvirtinkite, kad jis gauna atpažinimo ženklą ir pasiekia "Azure" išteklius be atskirų kredencialų.

Atnaujinkite į 2 versiją

Jei turite 0 arba 1 versijos priedą, galite jį perkelti į 2 versiją iš naujo nekurdami ar iš naujo neregistruodami priedo.

1 parinktis: "Power Platform CLI"

Pastaba.

CLI valdomi tapatybės veiksmažodžiai neveikia "Linux" operacinėse sistemose arba su vartotojo priskirta valdoma tapatybe (UAMI). Jei CLI neveikia jūsų sertifikatui, naudokite 2 parinktį: rankinis.

  1. Įdiekite "Power Platform CLI" 2.8.1 arba naujesnę versiją. Žr. "Microsoft Power Platform CLI" diegimas.
  2. Sukurkite autentifikavimo profilį: pac auth create
  3. Patikrinkite dabartinę versiją: pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2
  4. Atnaujinti: pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm
  5. Suaktyvinkite papildinį, kad patvirtintumėte.

2 variantas: rankinis

  1. Apskaičiuokite 2 versijos išdavėjo ir temos maišas. Žr. Emitento ir temos maišos apskaičiavimas.

  2. Pridėkite naują FIC su 2 versijos temos identifikatoriaus formatu (3 veiksmas).

  3. Atnaujinkite valdomą tapatybės įrašą į 2 versiją:

    PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>)
    
    { "version": 2 }
    
  4. Suaktyvinkite priedą ir patikrinkite, ar pavyko.

  5. Pašalinkite seną 1 FIC versiją.

Pastaba.

0 versija nebenaudojama. CLI palaikymas generuojant 2 FIC versiją vyksta.

Nuorodų

Gaukite užkoduotą nuomotojo ID

Užkoduotas nuomotojo ID yra nuomotojo GUID, konvertuotas į baitus ir užkoduotas kaip Base64URL (ne standartinis Base64):

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

Savarankiškai pasirašyto sertifikato generavimas

Tik kūrimui ar bandymams:

$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

Apskaičiuokite savarankiškai pasirašytą {hash} (SHA-256 virš .cer; jei reikia, eksportuokite iš pirmojo .pfx ):

CertUtil -hashfile <CertificateFilePath> SHA256

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

Specializuotos "Azure" debesies aplinkos

Aiškiai nustatykite auditoriją, išdavėjo URL ir temos priešdėlį , kai diegiate už viešojo debesies, GCC ir pirmosios laidos stoties ribų GCC.

Debesis Auditorija Išdavėjo URL Temos priešdėlis
GCC aukštas ir DoD api://AzureADTokenExchangeUSGov https://login.microsoftonline.us /eid1/c/usg
Mėnulio pyragas (Kinija) api://AzureADTokenExchangeChina https://login.partner.microsoftonline.cn /eid1/c/chn
JAV pilietis (USNAT) api://AzureADTokenExchangeUSNat https://login.microsoftonline.eaglex.ic.gov /eid1/c/uss
JAV saugus (USSec) api://AzureADTokenExchangeUSSec https://login.microsoftonline.scloud /eid1/c/usn

Pastaba.

Auditorijos reikšmėje skiriamos didžiosios ir mažosios raidės. Viešajame debesyje, GCC ir pirmojo leidimo stotyje GCC numatytieji nustatymai yra Auditorija api://AzureADTokenExchange, Emitentas https://login.microsoftonline.com, Subjekto priešdėlis /eid1/c/pub.

Dažnai užduodami klausimai (DUK)

Kaip išspręsti AADSTS700213: nerasta atitinkančio susieto tapatybės įrašo?

Vykdymo metu apskaičiuotas temos identifikatorius neatitinka jokio programos FIC. Patikrinkite, ar:

  1. Sukonfigūravote ir išsaugojote FIC.
  2. Išdavėjas ir subjektas atitinka 3 veiksme nurodytą formatą. Taip pat galite rasti numatomą formatą klaidų krūvoje.
  3. Įrašas version yra 2 ir FIC naudoja 2 versijos maišos formatą.
  4. Maiša apskaičiuojama iš vykdymo laiko DN eilutės (X509Certificate2.Issuer / X509Certificate2.Subject).
  5. Emitentas yra https://login.microsoftonline.com/{tenantId}/v2.0 , o auditorija yra api://AzureADTokenExchange (skiriamos didžiosios ir mažosios raidės).

Kaip išspręsti AADSTS70050: sujungtos valdomos tapatybės kelias netinkamai suformatuotas?

Temos identifikatoriuje yra simbolių, kurių tapatybės teikėjas nepriima – dažniausiai ne ASCII simbolių sertifikato CN pagal 1 versiją. 2 versija sukuria tik ASCII subjekto identifikatorių ir išsprendžia šią klaidą.

Kaip išspręsti klaidą "Nepavyko pasiekti arba prisijungti prie "Power Platform"?

Norėdami užtikrinti, kad "Power Platform" galiniai punktai būtų pasiekiami ir įtraukti į leidžiamų sąrašą, žr. " Power Platform" URL ir IP adresų diapazonai.