Delen via


SAS-tokens voor accounts maken en gebruiken met Azure Blob Storage en JavaScript

In dit artikel leest u hoe u SAS-tokens voor accounts maakt en gebruikt voor het gebruik van de Azure Blob Storage-clientbibliotheek v12 voor JavaScript. Zodra de code is verbonden, kan uw code worden uitgevoerd op containers, blobs en functies van de Blob Storage-service.

De voorbeeldcodefragmenten zijn beschikbaar in GitHub als runnable Node.js-bestanden.

Pakket (npm) | Samples | API reference | Library source code | Give Feedback

SAS-tokens voor accounts

Een SAS-token voor accounts is één type SAS-token voor toegangsdelegering die wordt geleverd door Azure Storage. Een SAS-accounttoken biedt toegang tot Azure Storage. Het token is alleen zo beperkend als u het definieert bij het maken ervan. Omdat iedereen met het token het kan gebruiken voor toegang tot uw Opslagaccount, moet u het token definiëren met de meest beperkende machtigingen waarmee het token de vereiste taken kan uitvoeren.

Best practices voor het maken van tokens zijn onder andere het beperken van machtigingen:

  • Services: blob, bestand, wachtrij, tabel
  • Resourcetypen: service, container of object
  • Machtigingen zoals maken, lezen, schrijven, bijwerken en verwijderen

Vereiste afhankelijkheden toevoegen aan uw toepassing

Neem de vereiste afhankelijkheden op om een SAS-token voor een account te maken.

const { 
    BlobServiceClient, 
    generateAccountSASQueryParameters, 
    AccountSASPermissions, 
    AccountSASServices,
    AccountSASResourceTypes,
    StorageSharedKeyCredential,
    SASProtocol 
} = require('@azure/storage-blob');
require('dotenv').config()

Omgevingsvariabelen ophalen om gedeelde sleutelreferenties te maken

Gebruik de naam en sleutel van het Blob Storage-account om een StorageSharedKeyCredential te maken. Deze sleutel is vereist om het SAS-token te maken en het SAS-token te gebruiken.

Maak een StorageSharedKeyCredential met behulp van de naam van het opslagaccount en de accountsleutel. Gebruik vervolgens StorageSharedKeyCredential om een BlobServiceClient te initialiseren.

const constants = {
    accountName: process.env.AZURE_STORAGE_ACCOUNT_NAME,
    accountKey: process.env.AZURE_STORAGE_ACCOUNT_KEY
};
const sharedKeyCredential = new StorageSharedKeyCredential(
    constants.accountName,
    constants.accountKey
);

Standaard asynchrone bewerking

Bij de resterende voorbeeldcodefragmenten wordt ervan uitgegaan dat de volgende asynchrone standaardcode voor Node.js wordt gebruikt.

async function main() {

    const sasToken = await createAccountSas();

    await useSasToken(sasToken);
}

main()
    .then(() => {
        console.log(`done`);
    }).catch((ex) => {
        console.log(`Error: ${ex.message}`)
    });

SAS-token maken

Omdat dit token kan worden gebruikt met blobs, wachtrijen, tabellen en bestanden, zijn sommige instellingen breder dan alleen blobopties.

  1. Maak het optiesobject.

    Het bereik van de mogelijkheden van een SAS-token wordt gedefinieerd door de AccountSASSignatureValues.

    Gebruik de volgende helperfuncties van de SDK om de juiste waardetypen voor de waarden te maken:

  2. Geef het object door aan de functie generateAccountSASQueryParameters, samen met sharedKeyCredential, om het SAS-token te maken.

    Voordat u het SAS-token retourneert, moet u het scheidingsteken voor de querytekenreeks vooraf laten gaan. ?

    async function createAccountSas() {
    
        const sasOptions = {
    
            services: AccountSASServices.parse("btqf").toString(),          // blobs, tables, queues, files
            resourceTypes: AccountSASResourceTypes.parse("sco").toString(), // service, container, object
            permissions: AccountSASPermissions.parse("rwdlacupi"),          // permissions
            protocol: SASProtocol.Https,
            startsOn: new Date(),
            expiresOn: new Date(new Date().valueOf() + (10 * 60 * 1000)),   // 10 minutes
        };
    
        const sasToken = generateAccountSASQueryParameters(
            sasOptions,
            sharedKeyCredential 
        ).toString();
    
        console.log(`sasToken = '${sasToken}'\n`);
    
        // prepend sasToken with `?`
        return (sasToken[0] === '?') ? sasToken : `?${sasToken}`;
    }
    
  3. Beveilig het SAS-token totdat het wordt gebruikt.

Blob-service gebruiken met sas-token voor accounts

Als u het SAS-token van het account wilt gebruiken, moet u het combineren met de accountnaam om de URI te maken. Geef de URI door om de blobServiceClient te maken. Zodra u de blobServiceClient hebt, kunt u die client gebruiken om toegang te krijgen tot uw Blob-service.

// connect-with-sas-token.js
const { BlobServiceClient } = require('@azure/storage-blob');
require('dotenv').config()

const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
const sasToken = process.env.AZURE_STORAGE_SAS_TOKEN;
if (!accountName) throw Error('Azure Storage accountName not found');
if (!sasToken) throw Error('Azure Storage accountKey not found');

const blobServiceUri = `https://${accountName}.blob.core.windows.net`;

// https://YOUR-RESOURCE-NAME.blob.core.windows.net?YOUR-SAS-TOKEN
const blobServiceClient = new BlobServiceClient(
  `${blobServiceUri}?${sasToken}`,
  null
);

async function main(){
  
  const containerName = 'REPLACE-WITH-EXISTING-CONTAINER-NAME';
  const blobName = 'REPLACE-WITH-EXISTING-BLOB-NAME';

  const timestamp = Date.now();
  const fileName = `my-new-file-${timestamp}.txt`;

  // create container client
  const containerClient = await blobServiceClient.getContainerClient(containerName);

  // create blob client
  const blobClient = await containerClient.getBlockBlobClient(blobName);

  // download file
  await blobClient.downloadToFile(fileName);

  console.log(`${fileName} downloaded`);
  
}

main()
  .then(() => console.log(`done`))
  .catch((ex) => console.log(`error: ${ex.message}`));

Het dotenv pakket wordt gebruikt om de naam van uw opslagaccount uit een .env bestand te lezen. Dit bestand mag niet worden ingecheckt bij broncodebeheer.

Zie ook