Dela via


Skapa och använda konto-SAS-token med Azure Blob Storage och JavaScript

Den här artikeln visar hur du skapar och använder konto-SAS-token för att använda Azure Blob Storage-klientbiblioteket v12 för JavaScript. När koden är ansluten kan den fungera på containrar, blobar och funktioner i Blob Storage-tjänsten.

Exempelkodfragmenten är tillgängliga i GitHub som körbara Node.js-filer.

Package (npm)Samples API reference Library source code Give Feedback (Paket (npm)Samples | API reference | Library source code | Give Feedback (Ge feedback) |

Konto-SAS-token

En SAS-token för kontot är en typ av SAS-token för åtkomstdelegering som tillhandahålls av Azure Storage. En SAS-token för kontot ger åtkomst till Azure Storage. Token är bara så restriktiv som du definierar den när du skapar den. Eftersom alla med token kan använda den för att komma åt ditt Lagringskonto bör du definiera token med de mest restriktiva behörigheter som fortfarande tillåter token att slutföra nödvändiga uppgifter.

Metodtips för att skapa token är att begränsa behörigheter:

  • Tjänster: blob, fil, kö, tabell
  • Resurstyper: tjänst, container eller objekt
  • Behörigheter som att skapa, läsa, skriva, uppdatera och ta bort

Lägga till nödvändiga beroenden i ditt program

Inkludera de beroenden som krävs för att skapa en SAS-token för kontot.

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

Hämta miljövariabler för att skapa autentiseringsuppgifter för delad nyckel

Använd bloblagringskontots namn och nyckel för att skapa en StorageSharedKeyCredential. Den här nyckeln krävs för att skapa SAS-token och för att använda SAS-token.

Skapa en StorageSharedKeyCredential med hjälp av lagringskontots namn och kontonyckel. Använd sedan StorageSharedKeyCredential för att initiera en BlobServiceClient.

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

Pannplatta för asynkron åtgärd

Återstående exempelkodfragment förutsätter följande async boilerplate-kod för Node.js.

async function main() {

    const sasToken = await createAccountSas();

    await useSasToken(sasToken);
}

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

Skapa SAS-token

Eftersom den här token kan användas med blobar, köer, tabeller och filer är vissa av inställningarna mer breda än bara blobalternativ.

  1. Skapa alternativobjektet.

    Omfattningen för funktionerna i en SAS-token definieras av AccountSASSignatureValues.

    Använd följande hjälpfunktioner som tillhandahålls av SDK för att skapa rätt värdetyper för värdena:

  2. Skicka objektet till funktionen generateAccountSASQueryParameters , tillsammans med SharedKeyCredential, för att skapa SAS-token.

    Innan du returnerar SAS-token förbereder du frågesträngens avgränsare, ?.

    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. Skydda SAS-token tills den används.

Använda Blob Service med konto-SAS-token

Om du vill använda kontots SAS-token måste du kombinera den med kontonamnet för att skapa URI:n. Skicka URI:n för att skapa blobServiceClient. När du har blobServiceClient kan du använda klienten för att komma åt blobtjänsten.

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

Paketet dotenv används för att läsa lagringskontots namn från en .env fil. Den här filen ska inte checkas in i källkontrollen.

Se även