Resurstoken i Azure Cosmos DB
GÄLLER FÖR: NoSQL MongoDB Kassandra Gremlin Bord
Resurstoken är autentiseringsuppgifter som kan ge specifik åtkomst till containrar, partitionsnycklar eller objekt. De kan finjusteras för att bevilja specifika behörigheter per användare och arbeta direkt med REST-API:et för Azure Cosmos DB. Resurstoken är ett alternativ till autentisering med hjälp av primära eller sekundära nycklar som konfigurerats för läs-/skriv- eller skrivbehörighet.
Viktigt!
Microsoft rekommenderar att du använder det säkraste tillgängliga autentiseringsflödet. Det autentiseringsflöde som beskrivs i den här proceduren kräver mycket stort förtroende för programmet och medför risker som inte finns i andra flöden. Du bör bara använda det här flödet när andra säkrare flöden, till exempel hanterade identiteter, inte är livskraftiga.
För Azure Cosmos DB är Microsoft Entra-autentisering den säkraste autentiseringsmekanismen som är tillgänglig. Läs lämplig säkerhetsguide för ditt API:
De interna Azure Cosmos DB-klientbiblioteken hanterar generering och hantering av resurstoken direkt. Men om du använder REST måste du skapa begärande-/autentiseringshuvudena själv. Mer information om hur du skapar autentiseringshuvuden för REST finns i åtkomstkontroll för Azure Cosmos DB-resurser i REST.
Förutsättningar
- Ett befintligt Azure Cosmos DB-konto
- .NET 8 SDK (eller senare)
Skapa en användare och behörighet
Först måste du skapa en användare med hjälp av Azure Cosmos DB för NoSQL SDK. Sedan kan du skapa en behörighet för användaren.
Kommentar
Många API:er, till exempel Cassandra och Gremlin, exponerar inte ett gränssnitt via sina interna SDK:er för att skapa resurstoken. Om du vill använda resurstoken måste du använda NoSQL SDK:er för att interagera med kontoslutpunkten oavsett vilket API du har valt.
Hämta NoSQL-slutpunkten och en av kontots läs-och skrivnycklar från ditt befintliga konto.
Lägg till 3.x-versionen av paketet i
Microsoft.Azure.Cosmos
.NET-projektet.dotnet add package Microsoft.Azure.Cosmos --version 3.*
Lägg till ett användningsblock för
Microsoft.Azure.Cosmos
namnområdet.using Microsoft.Azure.Cosmos;
Skapa en ny klient som anger noSQL-slutpunkten för ditt konto och en skrivskyddad nyckel.
CosmosClient client = new( accountEndpoint: "<account-nosql-endpoint>", authKeyOrResourceToken: "<account-read-write-key>" );
Kommentar
Du måste använda NoSQL-slutpunkten för ditt konto som vanligtvis är i det här formatet:
https://<account-name>.documents.azure.com:443/
.Hämta databas- och containerobjekt.
Database database = client.GetDatabase("<database-name>"); Container container = database.GetContainer("<container-name>");
Skapa en ny användare i databasen som anger namnet på användaren.
User user = await database.CreateUserAsync("demo-user");
Skapa en ny behörighet för användaren som anger behörighetsläget (
Read
ellerAll
), en unik identifierare, den begränsade containern och ett valfritt partitionsnyckelomfång.PermissionProperties permissionProperties = new( id: "read-permission", permissionMode: PermissionMode.All, container: container, resourcePartitionKey: new PartitionKey("partition-key-value") ); Permission permission = await user.CreatePermissionAsync(permissionProperties);
Hämta en resurstoken
Använd nu NoSQL SDK igen för att hämta en resurstoken från kontot.
PermissionResponse response = await permission.ReadAsync();
string resourceToken = response.Resource.Token;
Använda resurstoken
Slutligen kan du använda den interna SDK:n för ditt API för att använda resurstoken.
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);
}
}