Freigeben über


Ressourcentoken in Azure Cosmos DB

GILT FÜR: NoSQL MongoDB Cassandra Gremlin Tabelle

Ressourcentoken sind Anmeldeinformationen, die bestimmten Zugriff auf Container, Partitionsschlüssel oder Elemente ermöglichen können. Sie können optimiert werden, um bestimmte Berechtigungen pro Benutzer zu erteilen und direkt mit der REST-API für Azure Cosmos DB zu arbeiten. Ressourcentoken bieten eine Alternative zur Authentifizierung mithilfe primärer oder sekundärer Schlüssel, die für Lese-/Schreibzugriff oder schreibgeschützten Zugriff konfiguriert sind.

Wichtig

Microsoft empfiehlt, immer den sichersten Authentifizierungsflow zu verwenden. Der in diesem Verfahren beschriebene Authentifizierungsflow erfordert ein sehr hohes Maß an Vertrauen in die Anwendung und birgt Risiken, die bei anderen Flows nicht vorhanden sind. Sie sollten diesen Flow nur verwenden, wenn andere sicherere Flows (z. B. verwaltete Identitäten) nicht anwendbar sind.

Für Azure Cosmos DB ist die Microsoft Entra-Authentifizierung der sicherste Authentifizierungsmechanismus verfügbar. Lesen Sie den entsprechenden Sicherheitsleitfaden für Ihre API:

Die nativen Azure Cosmos DB-Clientbibliotheken verarbeiten die Generierung und Verwaltung von Ressourcentoken direkt. Wenn Sie JEDOCH REST verwenden, müssen Sie die Anforderungs-/Authentifizierungsheader selbst erstellen. Weitere Informationen zum Erstellen von Authentifizierungsheadern für REST finden Sie unter Zugriffssteuerung für Azure Cosmos DB-Ressourcen in REST.

Voraussetzungen

  • Ein vorhandenes Azure Cosmos DB-Konto
  • .NET 8 SDK (oder höher)

Erstellen eines Benutzers und einer Berechtigung

Zunächst müssen Sie einen Benutzer mit dem Azure Cosmos DB für NoSQL SDK erstellen. Anschließend können Sie eine Berechtigung für den Benutzer erstellen.

Hinweis

Viele APIs, wie Cassandra und Gremlin, machen keine Schnittstelle über ihre nativen SDKs verfügbar, um Ressourcentoken zu erstellen. Um Ressourcentoken zu verwenden, müssen Sie die NoSQL-SDKs verwenden, um unabhängig von der ausgewählten API mit Ihrem Kontoendpunkt zu arbeiten.

  1. Rufen Sie den NoSQL-Endpunkt und einen der Lese-/Schreibzugriffsschlüssel ihres vorhandenen Kontos ab.

  2. Fügen Sie die 3.x-Version des Microsoft.Azure.Cosmos Pakets zu Ihrem .NET-Projekt hinzu.

    dotnet add package Microsoft.Azure.Cosmos --version 3.*
    
  3. Fügen Sie einen using-Block für den Microsoft.Azure.Cosmos-Namespace hinzu.

    using Microsoft.Azure.Cosmos;
    
  4. Erstellen Sie einen neuen Client, der Ihren NoSQL-Endpunkt ihres Kontos und einen Lese-/Schreibzugriffsschlüssel angibt.

    CosmosClient client = new(
        accountEndpoint: "<account-nosql-endpoint>",
        authKeyOrResourceToken: "<account-read-write-key>"
    );
    

    Hinweis

    Sie müssen den NoSQL-Endpunkt für Ihr Konto verwenden, das sich in der Regel in diesem Format befindet: https://<account-name>.documents.azure.com:443/.

  5. Rufen Sie Ihre Datenbank- und Containerobjekte ab.

    Database database = client.GetDatabase("<database-name>");
    Container container = database.GetContainer("<container-name>");
    
  6. Erstellen Sie einen neuen Benutzer in der Datenbank, der den Namen des Benutzers angibt.

    User user = await database.CreateUserAsync("demo-user");
    
  7. Erstellen Sie eine neue Berechtigung für den Benutzer, der den Berechtigungsmodus (Read oder All), einen eindeutigen Bezeichner, den bereichsbezogenen Container und einen optionalen Partitionsschlüsselbereich angibt.

    PermissionProperties permissionProperties = new(
        id: "read-permission",
        permissionMode: PermissionMode.All,
        container: container,
        resourcePartitionKey: new PartitionKey("partition-key-value")
    );
    Permission permission = await user.CreatePermissionAsync(permissionProperties);
    

Abrufen eines Ressourcentokens

Verwenden Sie nun das NoSQL SDK erneut, um ein Ressourcentoken aus dem Konto abzurufen.

PermissionResponse response = await permission.ReadAsync();
string resourceToken = response.Resource.Token;

Verwenden des Ressourcentokens

Schließlich können Sie das systemeigene SDK für Ihre API verwenden, um das Ressourcentoken zu verwenden.

using Microsoft.Azure.Cosmos;

CosmosClient client = new(
    accountEndpoint: "<account-nosql-endpoint>",
    authKeyOrResourceToken: "<resource-token>"
);

Container container = client.GetContainer("<database-name>", "<container-name>");

var iterator = container.GetItemQueryIterator<dynamic>("SELECT * FROM c");

while (iterator.HasMoreResults)
{
    foreach (var item in await iterator.ReadNextAsync())
    {
        Console.WriteLine(item);
    }
}