ตั้งค่าข้อมูลประจําตัวที่มีการจัดการของ Power Platform สําหรับปลั๊กอิน Dataverse หรือแพคเกจปลั๊กอิน

เมื่อคุณใช้ข้อมูลประจําตัวที่มีการจัดการ Power Platform ปลั๊กอิน Dataverse หรือแพคเกจปลั๊กอินสามารถเชื่อมต่อกับทรัพยากร Azure ได้โดยไม่ต้องจัดการข้อมูลประจําตัว บทความนี้อธิบายถึงการตั้งค่า (เวอร์ชัน 2) ที่แนะนํา ซึ่งสร้างข้อมูลประจําตัวของรัฐบาลกลาง (FIC) จากแฮชของชื่อที่แตกต่างแบบเต็มของใบรับรอง (DN)

โน้ต

ใช้ Managed identity เวอร์ชัน 2 ของ Power Platform สำหรับปลั๊กอินใหม่ทั้งหมดและปลั๊กอินที่มีอยู่เดิม หากคุณยังคงดูแลปลั๊กอินที่ยังใช้รูปแบบเวอร์ชัน 1 (อิงตาม CN) โปรดดู ตั้งค่า Managed identity เวอร์ชัน 1 เมื่อต้องการย้ายปลั๊กอินที่มีอยู่ไปยังเวอร์ชัน 2 ดูอัปเกรดเป็นเวอร์ชัน 2

ทําไมเวอร์ชัน 2

เวอร์ชัน 2 สร้างตัวระบุชื่อเรื่องเฉพาะ ASCII ที่มีความยาวคงที่ดังนั้นจึงทํางานกับชื่อใบรับรองใด ๆ เวอร์ชัน 1 ทำงานล้มเหลวกับชื่อใบรับรองบางชื่อ (CNs):

  • อักขระที่ไม่ใช่ ASCII ใน CN (ตัวอย่างเช่น ตัวอักษรเน้น) → AADSTS70050: The Federated Managed Identity path is not properly formatted
  • เครื่องหมายจุลภาคใน CN (ตัวอย่างเช่น CN=Contoso, Inc.) → AADSTS700213: No matching federated identity record found

ข้อกําหนดเบื้องต้น

  • การสมัครใช้งาน Azure ที่มีการเข้าถึงเพื่อเตรียมใช้งานข้อมูลประจําตัวที่จัดการโดยผู้ใช้ (UAMI) หรือการลงทะเบียนแอปพลิเคชัน
  • เครื่องมือสําหรับปลั๊กอินหรือแพคเกจปลั๊กอิน:
  • ใบรับรองที่ถูกต้องสำหรับการเซ็นชื่อใน แอสเซมบลีของปลั๊กอิน

ตั้งค่าข้อมูลประจำตัวที่มีการจัดการ

  1. สร้างการลงทะเบียนแอปใหม่หรือข้อมูลประจำตัวที่มีการจัดการที่ผู้ใช้กำหนด
  2. สร้าง ลงชื่อเข้าใช้ และลงทะเบียนปลั๊กอิน
  3. กำหนดค่าข้อมูลรับรองประจำตัวแบบสหพันธ์
  4. สร้างระเบียนของข้อมูลประจำตัวที่มีการจัดการใน Dataverse
  5. ให้สิทธิ์การเข้าถึงทรัพยากร Azure
  6. ตรวจสอบความถูกต้องของการรวม

ขั้นตอนที่ 1: สร้างการลงทะเบียนแอปหรือข้อมูลประจําตัวที่ได้รับการจัดการโดยผู้ใช้

สร้างข้อมูลประจําตัวที่จัดการโดยผู้ใช้กําหนดเองหรือแอปพลิเคชันใน Microsoft Entra ID:

โน้ต

จับภาพ ID แอปพลิเคชัน (ไคลเอ็นต์) และ ID ผู้เช่า — ที่คุณใช้ในขั้นตอนต่อไป

ขั้นตอนที่ 2: สร้าง ลงชื่อเข้าใช้ และลงทะเบียนปลั๊กอิน

  1. สร้างปลั๊กอิน Visual Studio ใช้รหัสผู้เช่าจากขั้นตอนที่ 1 และขอบเขตเช่นhttps://{OrgName}.crm*.dynamics.com/.default ใช้ IManagedIdentityService เพื่อร้องขอโทเค็น:

    string AcquireToken(IEnumerable<string> scopes);
    
  2. ลงชื่อเข้าใช้ปลั๊กอินด้วยใบรับรองของคุณ

    แพคเกจปลั๊กอิน (NuGet):

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

    ส่วนประกอบปลั๊กอิน (SignTool):

    signtool sign /f MyCert.pfx /p MyPassword /t http://timestamp.digicert.com /fd SHA256 MyAssembly.dll
    
  3. ลงทะเบียนปลั๊กอินโดยใช้เครื่องมือลงทะเบียนปลั๊กอิน

โน้ต

ใช้ใบรับรองแบบลงนามด้วยตนเองสําหรับการพัฒนาหรือการทดสอบเท่านั้น อย่าใช้ใบรับรองแบบลงนามด้วยตนเองในการผลิต หากต้องการสร้างรายการหนึ่ง โปรดดู สร้างใบรับรองแบบลงนามด้วยตนเอง

ขั้นตอนที่ 3: กําหนดค่าข้อมูลประจําตัวภายนอก

ในพอร์ทัล Azure ให้เปิดข้อมูลประจําตัวที่จัดการโดยแอปหรือผู้ใช้กําหนดเอง (UAMI) ของคุณ ไปที่ ใบรับรองและข้อมูลลับ> ข้อมูลประจําตัวภายนอก>เพิ่มข้อมูลประจําตัว และเลือก ผู้ออกอื่น ๆ จากนั้นป้อน:

  • ผู้ออกhttps://login.microsoftonline.com/{tenantID}/v2.0

  • ชนิดตัวระบุหัวเรื่องที่ชัดเจน

  • ตัวระบุหัวเรื่อง — ใช้รูปแบบสําหรับชนิดใบรับรองของคุณ:

    • ใบรับรองผู้ออกที่เชื่อถือได้ (การผลิต):

      /eid1/c/pub/t/{encodedTenantId}/a/qzXoWDkuqUa3l6zM5mM0Rw/n/plugin/e/{environmentId}/i/{issuerHash}/s/{subjectHash}
      
    • ใบรับรองแบบลงนามด้วยตนเอง (เฉพาะการพัฒนาเท่านั้น):

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

    การอ้างอิงเซกเมนต์

    เซ็กเมนต์ รายละเอียด
    eid1 เวอร์ชันรูปแบบข้อมูลประจําตัว
    c/pub รหัสระบบคลาวด์สําหรับระบบคลาวด์สาธารณะ GCC และสถานีวางจําหน่ายครั้งแรกใน GCC
    t/{encodedTenantId} ID ผู้เช่า ดู รับรหัสผู้เช่าที่เข้ารหัสแล้ว
    a/qzXoWDkuqUa3l6zM5mM0Rw/ ใช้งานภายในเท่านั้น ไม่ต้องปรับเปลี่ยน
    n/plugin คอมโพเนนต์ปลั๊กอิน
    e/{environmentId} รหัสสภาพแวดล้อม
    i/{issuerHash} s/{subjectHash} แฮช SHA-256 Base64URL ของ DN แบบเต็มของผู้ออก/เจ้าของ ดูวิธี คำนวณค่าแฮชของผู้ออกและเจ้าของใบรับรอง
    h/{hash} SHA-256 ของใบรับรอง (เฉพาะที่เซ็นชื่อด้วยตนเองเท่านั้น)

คำนวณค่าแฮชของผู้ออกใบรับรองและเจ้าของใบรับรอง

นำสตริง DN แบบเต็มของผู้ออกใบรับรองและของเจ้าของใบรับรองตามที่ปรากฏบนใบรับรองมาแฮชด้วย SHA-256 แล้วเข้ารหัสแต่ละรายการเป็น Base64 แบบปลอดภัยสำหรับ URL รับสตริง DN ด้วย:

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

คํานวณแฮช (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"

หรือใน 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('=');
}

ผลลัพธ์คือสตริงที่มี 43 อักขระเท่านั้นA-Zที่ประกอบด้วย , a-z0-9, -, และ_

สำคัญ

ใช้สตริง DN ที่รันไทม์ใช้จริง (พร็อพเพอร์ตี X509Certificate2.Issuer และ X509Certificate2.Subject ของ .NET) DN ที่มีรูปแบบต่างกันจะไม่ตรงกันและจะล้มเหลวพร้อมกับ AADSTS700213

โน้ต

สําหรับการปรับใช้ภายนอกระบบคลาวด์สาธารณะ ให้ตั้งค่าเฉพาะระบบคลาวด์ ดูที่ สภาพแวดล้อมระบบคลาวด์เฉพาะของ Azure

ขั้นตอนที่ 4: สร้างระเบียนข้อมูลประจําตัวที่มีการจัดการใน Dataverse

ส่งคําขอ HTTP POST โดยใช้ REST client สําหรับเวอร์ชัน 2 ให้ตั้งค่าversionเป็น2

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

จากนั้นจึงผูกแอสเซมบลีปลั๊กอิน (หรือแพคเกจ) เข้ากับระเบียน:

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

สําหรับแพคเกจปลั๊กอิน ให้ใช้ pluginpackages(<<PluginPackageId>>) แทน

ขั้นตอนที่ 5: ให้สิทธิ์การเข้าถึงทรัพยากร Azure

ให้สิทธิ์การเข้าถึงข้อมูลเฉพาะตัว Azure ที่ผู้ใช้กําหนดเองหรือแอปพลิเคชันที่ต้องการ เช่น Azure Key Vault

ขั้นตอนที่ 6: ตรวจสอบการรวม

ทริกเกอร์ปลั๊กอินและยืนยันว่าได้รับโทเค็นและมีทรัพยากร Azure โดยไม่มีข้อมูลประจําตัวแยกต่างหาก

อัปเกรดเป็นเวอร์ชัน 2

ถ้าคุณมีปลั๊กอินบนเวอร์ชัน 0 หรือเวอร์ชัน 1 คุณสามารถย้ายไปยังเวอร์ชัน 2 ได้โดยไม่ต้องสร้างหรือลงทะเบียนปลั๊กอินใหม่หรือลงทะเบียนใหม่

ตัวเลือกที่ 1: Power Platform CLI

โน้ต

คํากริยาของข้อมูลประจําตัวที่จัดการโดย CLI ใช้ไม่ได้กับระบบปฏิบัติการที่ใช้ Linux หรือด้วยข้อมูลประจําตัวที่มีการจัดการโดยผู้ใช้ (UAMI) หาก CLI ใช้ไม่ได้กับใบรับรองของคุณ ให้ใช้ตัวเลือกที่ 2: ด้วยตนเอง

  1. ติดตั้ง Power Platform CLI เวอร์ชัน 2.8.1 หรือใหม่กว่า ดูติดตั้ง Microsoft Power Platform CLI
  2. สร้างโปรไฟล์การรับรองความถูกต้อง: pac auth create
  3. ตรวจสอบรุ่นปัจจุบัน: pac managed-identity show-fic --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --version 2
  4. อัพ เกรด: pac managed-identity upgrade-version --environment <orgUrl> --component-type PluginAssembly --component-id <pluginAssemblyId> --target-version 2 --confirm
  5. เรียกใช้ปลั๊กอินเพื่อตรวจสอบความถูกต้อง

ตัวเลือกที่ 2: คู่มือ

  1. การคำนวณแฮชเวอร์ชัน 2 ของผู้ออกและเจ้าของ ดู คำนวณแฮชของผู้ออกใบรับรองและเจ้าของใบรับรอง

  2. เพิ่ม FIC ใหม่ด้วยรูปแบบตัวระบุหัวเรื่อง 2 เวอร์ชัน (ขั้นตอนที่ 3)

  3. อัปเดตระเบียนข้อมูลประจําตัวที่มีการจัดการเป็นเวอร์ชัน 2:

    PATCH https://<<orgURL>>/api/data/v9.0/managedidentities(<<ManagedIdentityId>>)
    
    { "version": 2 }
    
  4. เรียกใช้ปลั๊กอินและตรวจสอบว่าการรับโทเค็นสำเร็จ

  5. ลบเวอร์ชันเก่า 1 FIC

โน้ต

เวอร์ชัน 0 ถูกยกเลิกการสนับสนุน การสนับสนุน CLI สําหรับการสร้างเวอร์ชัน 2 FIC อยู่ในระหว่างดําเนินการ

การอ้างอิง

รับรหัสผู้เช่าที่เข้ารหัสไว้

ID ผู้เช่าที่ถูกเข้ารหัสคือ GUID ของผู้เช่าที่แปลงเป็นไบต์และเข้ารหัสเป็น Base64URL (ไม่ใช่ Base64):

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

สร้างใบรับรองแบบลงนามด้วยตนเอง

สําหรับการพัฒนาหรือการทดสอบเท่านั้น:

$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

คํานวณการลงนาม {hash} ด้วยตนเอง (SHA-256 เหนือ .cer; ส่งออกจาก ตัว .pfx แรก ถ้าจําเป็น):

CertUtil -hashfile <CertificateFilePath> SHA256

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

สภาพแวดล้อมระบบคลาวด์ Azure แบบพิเศษ

ตั้งค่า ผู้ชมURL ผู้ออกและ คํานําหน้าหัวเรื่อง อย่างชัดเจนเมื่อปรับใช้นอกคลาวด์สาธารณะ GCC และสถานีการวางจําหน่ายครั้งแรกใน GCC

ระบบคลาวด์ กลุ่มเป้าหมาย URL ผู้ออก คํานําหน้าหัวเรื่อง
GCC High & DoD api://AzureADTokenExchangeUSGov https://login.microsoftonline.us /eid1/c/usg
มูนเค้ก (จีน) 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

โน้ต

ค่า ผู้ชม ต้องตรงตามตัวพิมพ์ใหญ่-เล็ก สำหรับคลาวด์สาธารณะ, GCC และช่องทางการเผยแพร่รุ่นแรกใน GCC ค่าเริ่มต้นคือ Audience api://AzureADTokenExchange, Issuer https://login.microsoftonline.com, Subject prefix /eid1/c/pub.

คำถามที่ถามบ่อย (FAQs)

ฉันจะแก้ปัญหา AADSTS700213 ได้อย่างไร: ไม่พบระเบียนข้อมูลประจําตัวของสหพันธ์ที่ตรงกัน

ตัวระบุหัวเรื่องที่คํานวณในขณะทํางานไม่ตรงกับ FIC ใด ๆ บนแอป ตรวจสอบว่า:

  1. คุณกําหนดค่าและบันทึก FIC
  2. ผู้ออกและหัวเรื่องตรงกับรูปแบบในขั้นตอนที่ 3 คุณยังสามารถค้นหารูปแบบที่คาดไว้ในลำดับชั้นข้อผิดพลาด
  3. ระเบียน version คือ 2 และ FIC ใช้รูปแบบแฮชเวอร์ชัน 2
  4. แฮชจะถูกคํานวณจากสตริง DN ของรันไทม์ (X509Certificate2.Issuer / X509Certificate2.Subject)
  5. ผู้ออกคือ https://login.microsoftonline.com/{tenantId}/v2.0 และผู้ชมคือ api://AzureADTokenExchange (ตรงตามตัวพิมพ์ใหญ่-เล็ก)

ฉันจะแก้ไข AADSTS70050 ได้อย่างไร: เส้นทางข้อมูลประจําตัวที่จัดการโดยติดต่อกับภายนอกถูกจัดรูปแบบอย่างไม่ถูกต้อง

ตัวระบุชื่อเรื่องประกอบด้วยอักขระที่ตัวให้บริการข้อมูลประจําตัวไม่ยอมรับ — อักขระที่ไม่ใช่ ASCII ส่วนใหญ่ในใบรับรอง CN ภายใต้เวอร์ชัน 1 เวอร์ชัน 2 สร้างตัวระบุหัวเรื่องเฉพาะ ASCII และแก้ไขข้อผิดพลาดนี้

ฉันจะแก้ไขข้อผิดพลาด "ไม่สามารถเข้าถึงหรือเชื่อมต่อกับ Power Platform" ได้อย่างไร?

เพื่อให้แน่ใจว่าจุดสิ้นสุด Power Platform สามารถเข้าถึงและอนุญาตได้ โปรดดู URL ของ Power Platform และช่วงที่อยู่ IP