แชร์ผ่าน


รับรองความถูกต้องกับ Cosmos DB ใน Microsoft Fabric จากสมุดบันทึก Fabric

Cosmos DB ใน Microsoft Fabric อาศัยการรับรองความถูกต้องของ Microsoft Entra ID และบทบาทระนาบข้อมูลในตัวเพื่อจัดการการรับรองความถูกต้องและการอนุญาต ในคู่มือนี้ คุณใช้ Microsoft Entra ID และบัญชีที่ลงชื่อเข้าใช้ของคุณเพื่อเชื่อมต่อกับสิ่งประดิษฐ์ Cosmos DB ใน Microsoft Fabric

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

  • ข้อมูลประจําตัวที่มีสิทธิ์ อ่าน สําหรับฐานข้อมูลใน Fabric

ดึงข้อมูลตําแหน่งข้อมูล Cosmos DB

ขั้นแรก รับตําแหน่งข้อมูลสําหรับฐานข้อมูล Cosmos DB ใน Fabric จุดสิ้นสุดนี้จําเป็นสําหรับการเชื่อมต่อโดยใช้ Azure SDK

  1. เปิดพอร์ทัล Fabric (https://app.fabric.microsoft.com)

  2. นําทางไปยังฐานข้อมูล Cosmos DB ที่มีอยู่ของคุณ

  3. เลือกตัวเลือก การตั้งค่า ในแถบเมนูสําหรับฐานข้อมูล

    สกรีนช็อตของตัวเลือกแถบเมนู 'การตั้งค่า' สําหรับฐานข้อมูลในพอร์ทัล Fabric

  4. ในกล่องโต้ตอบการตั้งค่า ให้ไปที่ส่วนการเชื่อมต่อ จากนั้น คัดลอกค่าของฟิลด์ฐานข้อมูล Endpoint for Cosmos DB NoSQL คุณใช้ค่านี้ในขั้นตอนต่อมา

    สกรีนช็อตของส่วน 'การเชื่อมต่อ' ของกล่องโต้ตอบ 'การตั้งค่า' สําหรับฐานข้อมูลในพอร์ทัล Fabric

รับรองความถูกต้องจากสมุดบันทึก

สมุดบันทึก Fabric ไม่มีวิธีสร้างออบเจ็กต์ข้อมูลประจําตัว Azure ที่ถูกต้องที่ใช้โดยบริการ Azure ผู้ใช้รับรองความถูกต้องโดยใช้ ยูทิลิตี้ข้อมูลประจําตัว Fabric NotebookUtils ซึ่งต้องการขอบเขตการรับรองความถูกต้องสําหรับ Cosmos DB และสร้างโทเค็นในรูปแบบสตริง ซึ่งต้องใช้รหัสแบบกําหนดเองเพื่อสร้างออบเจ็กต์ข้อมูลประจําตัว Azure ที่ถูกต้อง

นี่คือตัวอย่างสมุดบันทึกที่สาธิตวิธีการทําเช่นนี้

เซลล์ [1]:

#Install packages
%pip install azure-cosmos

เซลล์ [2]:

#Imports and config values
import logging

from azure.cosmos.aio import CosmosClient
from azure.cosmos.exceptions import CosmosHttpResponseError

COSMOS_ENDPOINT = 'https://my-cosmos-endpoint.cosmos.fabric.microsoft.com:443/'
COSMOS_DATABASE_NAME = '{your-cosmos-artifact-name}'
COSMOS_CONTAINER_NAME = '{your-container-name}'

เนื้อหาของ เซลล์ 3 สร้างวัตถุ FabricTokenCredential() และประกอบด้วยรหัสที่จําเป็นในการสร้างวัตถุข้อมูลประจําตัวที่ถูกต้องสําหรับ Cosmos DB SDK จากสตริงโทเค็นที่สร้างขึ้นโดย ยูทิลิตี้ข้อมูลประจําตัว Fabric NotebookUtils ซึ่งจําเป็นในการรับรองความถูกต้องของผู้ใช้

เซลล์ [3]:

# Custom TokenCredential implementation for Fabric authentication in a notebook
%pip install azure-core
from azure.core.credentials import TokenCredential, AccessToken
import base64
import json
import notebookutils
from datetime import datetime, timezone

class FabricTokenCredential(TokenCredential):

    def get_token(self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None,
                  enable_cae: bool = False, **kwargs: Any) -> AccessToken:
        access_token = notebookutils.credentials.getToken("https://cosmos.azure.com/")
        parts = access_token.split(".")
        if len(parts) < 2:
            raise ValueError("Invalid JWT format")
        payload_b64 = parts[1]
        # Fix padding
        padding = (-len(payload_b64)) % 4
        if padding:
            payload_b64 += "=" * padding
        payload_json = base64.urlsafe_b64decode(payload_b64.encode("utf-8")).decode("utf-8")
        payload = json.loads(payload_json)
        exp = payload.get("exp")
        if exp is None:
            raise ValueError("exp claim missing in token")
        return AccessToken(token=access_token, expires_on=exp) 

เซลล์ [4]:

# Create a Cosmos client with the FabricTokenCredential() and run a query
async with CosmosClient(endpoint, credential=FabricTokenCredential()) as client:
    container = client.get_database_client(COSMOS_DATABASE_NAME).get_container_client(COSMOS_CONTAINER_NAME)

    query_text = "SELECT * FROM c"

    results = container.query_items(query=query_text)

    items = []
    async for item in results:
        items.append(item)

    for item in items:
        print(item)