Aracılığıyla paylaş


Azure Cosmos DB'de kaynak belirteçleri

ŞUNLAR IÇIN GEÇERLIDIR: NoSQL MongoDB Cassandra Gremlin Masa

Kaynak belirteçleri kapsayıcılara, bölüm anahtarlarına veya öğelere belirli erişim sağlayabilen kimlik bilgileridir. Bunlar, kullanıcı başına belirli izinler vermek ve doğrudan Azure Cosmos DB için REST API ile çalışmak üzere ince ayar yapılabilir. Kaynak belirteçleri, okuma/yazma veya salt okunur erişim için yapılandırılmış birincil veya ikincil anahtarları kullanarak kimlik doğrulamasına alternatif sağlar.

Önemli

Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Bu yordamda açıklanan kimlik doğrulama akışı, uygulamada çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskleri taşır. Bu akışı yalnızca yönetilen kimlikler gibi diğer daha güvenli akışlar uygun olmadığında kullanmalısınız.

Azure Cosmos DB için Microsoft Entra kimlik doğrulaması, kullanılabilen en güvenli kimlik doğrulama mekanizmasıdır. API'niz için uygun güvenlik kılavuzunu gözden geçirin:

Yerel Azure Cosmos DB istemci kitaplıkları kaynak belirteci oluşturmayı ve yönetimini doğrudan işler. Ancak REST kullanıyorsanız istek/kimlik doğrulama üst bilgilerini kendiniz oluşturmanız gerekir. REST için kimlik doğrulama üst bilgileri oluşturma hakkında daha fazla bilgi için bkz . REST'te Azure Cosmos DB kaynakları üzerinde erişim denetimi.

Önkoşullar

  • Mevcut bir Azure Cosmos DB hesabı
  • .NET 8 SDK (veya üzeri)

Kullanıcı ve izin oluşturma

İlk olarak, NoSQL için Azure Cosmos DB SDK'sını kullanarak bir kullanıcı oluşturmanız gerekir. Ardından, kullanıcı için bir izin oluşturabilirsiniz.

Not

Cassandra ve Gremlin gibi birçok API, kaynak belirteçleri oluşturmak için yerel SDK'ları aracılığıyla bir arabirimi kullanıma sunmaz. Kaynak belirteçlerini kullanmak için, seçtiğiniz API'ye bakılmaksızın hesap uç noktanızla arabirim oluşturmak için NoSQL SDK'larını kullanmanız gerekir.

  1. Mevcut hesabınızdan NoSQL uç noktasını ve hesabın okuma-yazma anahtarlarından birini alın.

  2. Paketin 3.x sürümünü Microsoft.Azure.Cosmos .NET projenize ekleyin.

    dotnet add package Microsoft.Azure.Cosmos --version 3.*
    
  3. Ad alanı için Microsoft.Azure.Cosmos bir using bloğu ekleyin.

    using Microsoft.Azure.Cosmos;
    
  4. Hesabınızın NoSQL uç noktasını ve okuma-yazma anahtarını belirten yeni bir istemci oluşturun.

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

    Not

    Hesabınız için normalde şu biçimde olan NoSQL uç noktasını kullanmanız gerekir: https://<account-name>.documents.azure.com:443/.

  5. Veritabanınızı ve kapsayıcı nesnelerinizi alın.

    Database database = client.GetDatabase("<database-name>");
    Container container = database.GetContainer("<container-name>");
    
  6. Veritabanında kullanıcının adını belirten yeni bir kullanıcı oluşturun.

    User user = await database.CreateUserAsync("demo-user");
    
  7. İzin modunu (Read veya All), benzersiz bir tanımlayıcıyı, kapsamlı kapsayıcıyı ve isteğe bağlı bölüm anahtarı kapsamını belirten kullanıcı için yeni bir izin oluşturun.

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

Kaynak belirteci alma

Şimdi, hesaptan kaynak belirteci almak için NoSQL SDK'sını yeniden kullanın.

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

Kaynak belirtecini kullanma

Son olarak, kaynak belirtecini kullanmak için API'niz için yerel SDK'yı kullanabilirsiniz.

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