แชร์ผ่าน


แนวทางการรับรองความถูกต้องสําหรับ Microsoft Fabric Extensibility Toolkit

บทความนี้ให้แนวทางเกี่ยวกับวิธีการทํางานกับการรับรองความถูกต้องเมื่อสร้างปริมาณงานชุดเครื่องมือการขยายของ Microsoft Fabric ประกอบด้วยข้อมูลเกี่ยวกับการทํางานกับโทเค็น ความยินยอม และการเข้าถึงบริการต่างๆ จากแอปพลิเคชันส่วนหน้าของคุณ

ก่อนที่คุณจะเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณคุ้นเคยกับแนวคิดในภาพรวมการรับรองความถูกต้อง

โมเดลการรับรองความถูกต้องเฉพาะส่วนหน้า

ชุดเครื่องมือความสามารถในการขยายใช้สถาปัตยกรรมเฉพาะส่วนหน้าที่ช่วยลดความยุ่งยากในการรับรองความถูกต้องเมื่อเทียบกับปริมาณงานแบบเดิม:

  • การเรียกใช้ API โดยตรง: ส่วนหน้าของคุณเรียก Fabric API บริการ Azure และแอปพลิเคชันภายนอกโดยตรง
  • การนําโทเค็นกลับมาใช้ใหม่: โทเค็นเดียวสามารถใช้เพื่อตรวจสอบสิทธิ์กับบริการที่ปลอดภัยของ Entra หลายรายการ
  • ความยินยอมแบบง่าย: การจัดการความยินยอมได้รับการจัดการโดยแพลตฟอร์มด้วยข้อความแจ้งอัตโนมัติ

การกําหนดค่าแอปพลิเคชัน Microsoft Entra

แสดงแท็บ API

กําหนดค่าขอบเขตสําหรับแอปพลิเคชันปริมาณงานของคุณ:

  • ขอบเขตการรวมแฟบริค: อนุญาต Microsoft Power BI ล่วงหน้าด้วยรหัสแอปพลิเคชัน 871c010f-5e61-4fb1-83ac-98610a7e9110
  • ขอบเขต API แบบกําหนดเอง: เพิ่มขอบเขตสําหรับ API แบบกําหนดเองที่ปริมาณงานของคุณเปิดเผย
  • สิทธิ์แบบละเอียด: ใช้ขอบเขตที่แตกต่างกันสําหรับการดําเนินการอ่านเทียบกับการเขียน

ตัวอย่างเช่น หากปริมาณงานของคุณเปิดเผย API ข้อมูล:

  • เพิ่ม data.read ขอบเขตสําหรับการดําเนินการอ่าน
  • เพิ่ม data.write ขอบเขตสําหรับการดําเนินการเขียน
  • ตรวจสอบขอบเขตที่เหมาะสมในตัวจัดการ API ของคุณ

แท็บสิทธิ์ API

กําหนดค่าสิทธิ์สําหรับบริการภายนอกที่ปริมาณงานของคุณจําเป็นต้องเข้าถึง:

  • จําเป็น: Fabric.Extend ภายใต้บริการของ Power BI (บังคับสําหรับการรวม Fabric)
  • บริการ Azure: เพิ่มขอบเขตสําหรับบริการ Azure เช่น https://storage.azure.com/user_impersonation
  • แอปพลิเคชันแบบกําหนดเอง: เพิ่มขอบเขตสําหรับแอปพลิเคชันที่ปลอดภัยด้วย Entra ของคุณเอง
  • บริการของบุคคลที่สาม: รวมบริการภายนอกที่รองรับการรับรองความถูกต้องทางเข้า

รูปแบบการใช้โทเค็น

การใช้โทเค็นสําหรับบริการหลายรายการ

โทเค็นส่วนหน้าที่ได้มาผ่าน Extensibility Toolkit สามารถใช้เพื่อรับรองความถูกต้องกับ:

API ของผ้า

// Token automatically includes required Fabric scopes
const response = await fetch('https://api.fabric.microsoft.com/v1/workspaces', {
  headers: {
    'Authorization': `Bearer ${token.accessToken}`
  }
});

บริการ Azure

// Same token works for Azure services
const response = await fetch('https://management.azure.com/subscriptions', {
  headers: {
    'Authorization': `Bearer ${token.accessToken}`
  }
});

แอปพลิเคชันแบบกําหนดเอง

// Token works for your own Entra-secured applications
const response = await fetch('https://myapp.contoso.com/api/data', {
  headers: {
    'Authorization': `Bearer ${token.accessToken}`
  }
});

การจัดการขอบเขต

ชุดเครื่องมือความสามารถในการขยายบทคัดย่อการจัดการขอบเขตสําหรับสถานการณ์ทั่วไป:

  • ไลบรารีไคลเอ็นต์ Fabric: รวมขอบเขต Fabric ที่จําเป็นโดยอัตโนมัติ
  • ไลบรารีไคลเอ็นต์ Azure: จัดการขอบเขตบริการ Azure อย่างโปร่งใส
  • ขอบเขตที่กําหนดเอง: ระบุขอบเขตเพิ่มเติมเมื่อจําเป็น

การทํางานโดยได้รับความยินยอม

การได้มาซึ่งโทเค็นเริ่มต้น

เริ่มต้นด้วยการรับโทเค็นเพื่อสร้างบริบทการรับรองความถูกต้อง:

const token = await workloadClient.auth.acquireFrontendAccessToken({ scopes: [] });

การโทรนี้อาจส่งผลให้:

  • ข้อความแจ้งความยินยอม: หากผู้ใช้ไม่ยินยอมให้แอปพลิเคชันของคุณ
  • การได้มาแบบเงียบ: หากได้รับความยินยอมก่อนหน้านี้

การจัดการการเข้าถึงบริการเพิ่มเติม

เมื่อปริมาณงานของคุณจําเป็นต้องเข้าถึงบริการเพิ่มเติม ให้ระบุขอบเขตที่จําเป็น:

try {
  // Request token with specific scopes for Azure Storage
  const token = await workloadClient.auth.acquireFrontendAccessToken({
    scopes: ['https://storage.azure.com/user_impersonation']
  });
  
  // Use token to access Azure Storage
  const response = await fetch('https://mystorageaccount.blob.core.windows.net/', {
    headers: { 'Authorization': `Bearer ${token.token}` }
  });
} catch (error) {
  // Handle authentication or authorization errors
  console.error('Access failed:', error.message);
}

ตัวอย่างสถานการณ์

สถานการณ์ที่ 1: การเข้าถึง Fabric และบริการ Azure

ปริมาณงานของคุณต้อง:

  • รายการพื้นที่ทํางาน Fabric
  • อ่านจากที่เก็บข้อมูล Azure
  • เขียนไปยัง Azure Key Vault

การดําเนินการ:

  1. กําหนดค่าสิทธิ์ API สําหรับบริการที่จําเป็น
  2. รับโทเค็นเริ่มต้น
  3. ใช้โทเค็นสําหรับการเรียกใช้บริการทั้งหมด
  4. จัดการกับข้อความแจ้งความยินยอมตามต้องการ

สถานการณ์ที่ 2: การรวมแอปพลิเคชันแบบกําหนดเอง

ปริมาณงานของคุณผสานรวมกับบริการแบ็กเอนด์ของคุณเอง:

  1. กําหนดค่าแบ็กเอนด์ของคุณ: ตรวจสอบให้แน่ใจว่ายอมรับโทเค็น Entra
  2. เพิ่มสิทธิ์ API: รวมขอบเขตของแบ็กเอนด์ของคุณในแอปพลิเคชันปริมาณงาน
  3. ใช้การรับรองความถูกต้องมาตรฐาน: รูปแบบโทเค็นเดียวกันนี้ใช้ได้กับบริการที่กําหนดเองของคุณ

สถานการณ์สมมติที่ 3: การรวมบริการของบริษัทอื่น

การผสานรวมกับบริการภายนอกที่เปิดใช้งาน Entra:

  1. การลงทะเบียนบริการ: ลงทะเบียนปริมาณงานของคุณกับบริการของบุคคลที่สาม
  2. การกําหนดค่าขอบเขต: เพิ่มขอบเขตของบริการไปยังสิทธิ์ API ของคุณ
  3. การใช้โทเค็น: ใช้รูปแบบการรับรองความถูกต้องเดียวกันสําหรับบริการภายนอก

การจัดการข้อผิดพลาดและการแก้ไขปัญหา

ข้อผิดพลาดทั่วไปในการรับรองความถูกต้อง

  • ต้องได้รับความยินยอม: ผู้ใช้ไม่ได้ให้สิทธิ์สําหรับขอบเขตที่เฉพาะเจาะจง
  • การเข้าถึงแบบมีเงื่อนไข: ข้อกําหนดการตรวจสอบสิทธิ์เพิ่มเติม (เช่น MFA)
  • การหมดอายุของโทเค็น: โทเค็นหมดอายุและจําเป็นต้องรีเฟรช
  • ขอบเขตไม่ถูกต้อง: ขอบเขตที่ร้องขอไม่ได้กําหนดค่าหรือพร้อมใช้งาน

รูปแบบการจัดการข้อผิดพลาด

async function handleAuthenticatedRequest(url: string, requiredScopes: string[] = []) {
  try {
    const token = await workloadClient.auth.acquireFrontendAccessToken({ 
      scopes: requiredScopes 
    });
    return await makeRequest(url, token);
  } catch (error) {
    if (error.code === 'consent_required') {
      // User needs to grant consent for the requested scopes
      console.error('Consent required for scopes:', requiredScopes);
    }
    throw error;
  }
}

การจัดการ URI เปลี่ยนเส้นทาง

ชุดเครื่องมือความสามารถในการขยายประกอบด้วยการจัดการ URI การเปลี่ยนเส้นทางในตัวสําหรับป๊อปอัปความยินยอมในการตรวจสอบสิทธิ์ สิ่งนี้ถูกนําไปใช้ในไฟล์หลัก index.ts และจัดการการเปลี่ยนเส้นทางความยินยอมโดยอัตโนมัติ

ชุดเครื่องมือจัดการ:

  • การปิดหน้าต่างอัตโนมัติ: ป๊อปอัปความยินยอมจะปิดโดยอัตโนมัติหลังจากการโต้ตอบของผู้ใช้
  • การจัดการข้อผิดพลาด: ตรวจพบและจัดการรหัสข้อผิดพลาดที่เฉพาะเจาะจงอย่างเหมาะสม
  • การแสดงข้อผิดพลาด: ความพยายามขอความยินยอมที่ล้มเหลวจะแสดงข้อความแสดงข้อผิดพลาดที่ใช้งานง่าย

การใช้งานปัจจุบันในชุดเครื่องมือ:

const redirectUriPath = '/close';
const url = new URL(window.location.href);
if (url.pathname?.startsWith(redirectUriPath)) {
  // Handle errors
  if (url?.hash?.includes("error")) {
    if (url.hash.includes("AADSTS650052")) {
      // Handle missing service principal error
      printFormattedAADErrorMessage(url?.hash);
    } else if (url.hash.includes("AADSTS65004")) {
      // Handle user declined consent error
      printFormattedAADErrorMessage(url?.hash);
    } else {
      window.close();
    }
  } else {
    // Close window on successful consent
    window.close();
  }
}

Note

การจัดการ URI การเปลี่ยนเส้นทางจะรวมอยู่ในเทมเพลตชุดเครื่องมือความสามารถในการขยายโดยอัตโนมัติ คุณไม่จําเป็นต้องนําสิ่งนี้ไปใช้ด้วยตัวเอง เว้นแต่คุณต้องการปรับแต่งลักษณะการทํางานการจัดการข้อผิดพลาด

แนวทางปฏิบัติที่ดีที่สุด

การจัดการโทเค็น

  • โทเค็นแคช: นําโทเค็นกลับมาใช้ใหม่จนกว่าจะหมดอายุ
  • จัดการการรีเฟรช: ใช้ตรรกะการรีเฟรชโทเค็นอัตโนมัติ
  • ที่เก็บข้อมูลที่ปลอดภัย: จัดเก็บโทเค็นอย่างปลอดภัยในหน่วยความจําเบราว์เซอร์
  • สิทธิ์ขั้นต่ํา: ขอเฉพาะขอบเขตที่คุณต้องการจริงๆ
  • ความยินยอมแบบก้าวหน้า: ขอสิทธิ์เพิ่มเติมเมื่อมีการใช้ฟีเจอร์
  • ข้อความที่ชัดเจน: อธิบายให้ผู้ใช้ทราบว่าเหตุใดจึงจําเป็นต้องมีสิทธิ์

การจัดการข้อผิดพลาด

  • การเสื่อมสภาพอย่างสง่างาม: ให้ฟังก์ชันสํารองเมื่อเป็นไปได้
  • ความคิดเห็นของผู้ใช้: สื่อสารข้อกําหนดการตรวจสอบสิทธิ์อย่างชัดเจน
  • ตรรกะการลองใหม่: ใช้กลไกการลองใหม่ที่เหมาะสมสําหรับความล้มเหลวชั่วคราว