Partager via


Jetons de ressource dans Azure Cosmos DB

S’APPLIQUE À : NoSQL MongoDB Cassandra Gremlin Table

Les jetons de ressource sont des informations d’identification qui peuvent fournir un accès spécifique aux conteneurs, aux clés de partition ou aux éléments. Ils peuvent être affinés pour accorder des autorisations spécifiques par utilisateur et travailler directement avec l’API REST pour Azure Cosmos DB. Les jetons de ressource offrent une alternative à l’authentification à l’aide de clés primaires ou secondaires configurées pour l’accès en lecture/écriture ou en lecture seule.

Important

Microsoft vous recommande d’utiliser le flux d’authentification le plus sécurisé disponible. Le flux d'authentification décrit dans cette procédure demande un degré de confiance très élevé dans l'application et comporte des risques qui ne sont pas présents dans d'autres flux. Vous ne devez utiliser ce flux que si d’autres flux plus sécurisés, tels que les identités managées, ne sont pas viables.

Pour Azure Cosmos DB, l’authentification Microsoft Entra est le mécanisme d’authentification le plus sécurisé disponible. Passez en revue le guide de sécurité approprié pour votre API :

Les bibliothèques clientes Azure Cosmos DB natives gèrent directement la génération et la gestion des jetons de ressource. Toutefois, si vous utilisez REST, vous devez construire vous-même les en-têtes de demande/authentification. Pour plus d’informations sur la création d’en-têtes d’authentification pour REST, consultez le contrôle d’accès sur les ressources Azure Cosmos DB dans REST.

Prérequis

  • Un compte Azure Cosmos DB existant
  • Sdk .NET 8 (ou version ultérieure)

Créer un utilisateur et une autorisation

Tout d’abord, vous devez créer un utilisateur à l’aide du Kit de développement logiciel (SDK) Azure Cosmos DB pour NoSQL. Vous pouvez ensuite créer une autorisation pour l’utilisateur.

Remarque

De nombreuses API, comme Cassandra et Gremlin, n’exposent pas d’interface par le biais de leurs sdk natifs pour créer des jetons de ressource. Pour utiliser des jetons de ressource, vous devez utiliser les Kits de développement logiciel (SDK) NoSQL pour interagir avec votre point de terminaison de compte, quelle que soit l’API que vous avez sélectionnée.

  1. Obtenez le point de terminaison NoSQL et l’une des clés en lecture-écriture du compte à partir de votre compte existant.

  2. Ajoutez la version 3.x du Microsoft.Azure.Cosmos package à votre projet .NET.

    dotnet add package Microsoft.Azure.Cosmos --version 3.*
    
  3. Ajouter un bloc d'utilisation pour l'espace de noms Microsoft.Azure.Cosmos.

    using Microsoft.Azure.Cosmos;
    
  4. Créez un client spécifiant votre point de terminaison NoSQL de compte et une clé en lecture-écriture.

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

    Remarque

    Vous devez utiliser le point de terminaison NoSQL pour votre compte qui se trouve généralement dans ce format : https://<account-name>.documents.azure.com:443/.

  5. Obtenez vos objets de base de données et de conteneur.

    Database database = client.GetDatabase("<database-name>");
    Container container = database.GetContainer("<container-name>");
    
  6. Créez un utilisateur dans la base de données en spécifiant le nom de l’utilisateur.

    User user = await database.CreateUserAsync("demo-user");
    
  7. Créez une autorisation pour l’utilisateur spécifiant le mode d’autorisation (Read ou All), un identificateur unique, le conteneur délimité et une étendue de clé de partition facultative.

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

Obtenir un jeton de ressource

À présent, utilisez à nouveau le Kit de développement logiciel (SDK) NoSQL pour obtenir un jeton de ressource à partir du compte.

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

Utiliser le jeton de ressource

Enfin, vous pouvez utiliser le Kit de développement logiciel (SDK) natif pour votre API afin d’utiliser le jeton de ressource.

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);
    }
}