Sdílet prostřednictvím


Přihlásit se k Cosmos DB v Microsoft Fabric z notebooků Fabric

Cosmos DB ve službě Microsoft Fabric využívá výhradně ověřování Microsoft Entra ID a předdefinované role roviny dat ke správě ověřování a autorizace. V této příručce použijete Id Microsoft Entra a váš přihlášený účet pro připojení k artefaktu Cosmos DB v Microsoft Fabric.

Požadavky

  • Identita s oprávněním ke čtení pro databázi ve Fabric.

Načtení koncového bodu Cosmos DB

Nejprve získejte koncový bod pro databázi Cosmos DB ve službě Fabric. Tento koncový bod se vyžaduje pro připojení pomocí sady Azure SDK.

  1. Otevřete portál Fabric (https://app.fabric.microsoft.com).

  2. Přejděte do existující databáze Cosmos DB.

  3. V řádku nabídek databáze vyberte možnost Nastavení .

    Snímek obrazovky s položkou menu 'Nastavení' pro databázi na portálu Fabric

  4. V dialogovém okně nastavení přejděte do části Připojení . Pak zkopírujte hodnotu pole koncového bodu pro databázi NoSQL služby Cosmos DB. Tuto hodnotu použijete v pozdějších krocích.

    Snímek obrazovky s částí Připojení v dialogovém okně Nastavení pro databázi na portálu Fabric

Ověření z notebooku

Poznámkové bloky Fabric nemají způsob, jak vytvořit platný objekt oprávnění Azure používaný službami Azure. Uživatelé se ověřují pomocí nástrojů přihlašovacích údajů Fabric NotebookUtils , které vyžadují obor ověřování pro Službu Cosmos DB a vytvoří token ve formátu řetězce. K vytvoření platného objektu přihlašovacích údajů Azure vyžaduje nějaký vlastní kód.

Tady je ukázka poznámkového bloku, která ukazuje, jak to udělat.

Buňka [1]:

#Install packages
%pip install azure-cosmos

Buňka [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}'

Obsah buňky 3 vytvoří objekt FabricTokenCredential() a obsahuje kód potřebný k vytvoření platného objektu přihlašovacích údajů pro sadu SDK služby Cosmos DB z řetězce tokenu vygenerovaného nástroji přihlašovacích údajů Fabric NotebookUtils , které jsou nutné k ověření uživatele.

Buňka [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) 

Buňka [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)