Vytváření a používání tokenů SAS účtu se službou Azure Blob Storage a JavaScriptem

V tomto článku se dozvíte, jak vytvořit a používat tokeny SAS účtu k používání klientské knihovny Azure Blob Storage v12 pro JavaScript. Po připojení může váš kód pracovat s kontejnery, objekty blob a funkcemi služby Blob Storage.

Ukázkové fragmenty kódu jsou k dispozici na GitHubu jako spustitelné soubory Node.js.

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

Tokeny SAS účtu

Token SAS účtu je jedním typem tokenu SAS pro delegování přístupu, které poskytuje Azure Storage. Token SAS účtu poskytuje přístup ke službě Azure Storage. Token je při vytváření pouze tak omezující, jak ho definujete. Vzhledem k tomu, že ho kdokoli s tímto tokenem může použít pro přístup k vašemu účtu úložiště, měli byste tento token definovat s nejvíce omezujícími oprávněními, která token stále umožňují dokončit požadované úlohy.

Mezi osvědčené postupy pro vytváření tokenů patří omezení oprávnění:

  • Služby: objekt blob, soubor, fronta, tabulka
  • Typy prostředků: služba, kontejner nebo objekt
  • Oprávnění, jako je vytvoření, čtení, zápis, aktualizace a odstranění

Přidání požadovaných závislostí do aplikace

Zahrňte požadované závislosti pro vytvoření tokenu SAS účtu.

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

Získání proměnných prostředí pro vytvoření přihlašovacích údajů sdíleného klíče

Pomocí názvu a klíče účtu služby Blob Storage vytvořte storageSharedKeyCredential. Tento klíč je nutný k vytvoření tokenu SAS a k použití tokenu SAS.

Vytvořte StorageSharedKeyCredential pomocí názvu účtu úložiště a klíče účtu. Potom pomocí StorageSharedKeyCredential inicializujete objekt 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
);

Async operation boilerplate

Zbývající fragmenty vzorového kódu předpokládají následující asynchronní často používaný kód pro Node.js.

async function main() {

    const sasToken = await createAccountSas();

    await useSasToken(sasToken);
}

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

Vytvoření tokenu SAS

Vzhledem k tomu, že tento token lze použít s objekty blob, frontami, tabulkami a soubory, jsou některá nastavení širší než jen možnosti objektů blob.

  1. Vytvořte objekt možností.

    Rozsah schopností tokenu SAS je definován accountSASSignatureValues.

    Pomocí následujících pomocných funkcí poskytovaných sadou SDK vytvořte správné typy hodnot pro tyto hodnoty:

  2. Předat objekt generateAccountSASQueryParameters funkce spolu s SharedKeyCredential, vytvořit token SAS.

    Před vrácením tokenu SAS předdělte oddělovač řetězce dotazu . ?

    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. Token SAS zabezpečte, dokud se nepoužije.

Použití služby Blob Service s tokenem SAS účtu

Pokud chcete použít token SAS účtu, musíte ho zkombinovat s názvem účtu a vytvořit identifikátor URI. Předáním identifikátoru URI vytvořte objekt blobServiceClient. Jakmile budete mít objekt blobServiceClient, můžete ho použít pro přístup ke službě 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}`));

Balíček dotenv se používá ke čtení názvu účtu úložiště ze .env souboru. Tento soubor by neměl být vrácen do správy zdrojového kódu.

Viz také