Membuat dan menggunakan token SAS akun dengan Azure Blob Storage dan JavaScript

Artikel ini menunjukkan cara membuat dan menggunakan token SAS akun untuk menggunakan pustaka klien Azure Blob Storage v12 untuk JavaScript. Setelah terhubung, kode Anda dapat beroperasi pada kontainer, blob, dan fitur layanan Blob Storage.

Cuplikan kode sampel tersedia di GitHub sebagai file Node.js yang dapat dijalankan.

Paket (npm) | Contoh | referensi API | Kode sumber pustaka | Berikan Umpan Balik

Token SAS akun

Token SAS akun adalah salah satu jenis token SAS untuk delegasi akses yang disediakan oleh Azure Storage. Token SAS akun menyediakan akses ke Azure Storage. Token memiliki batasan sesuai dengan yang Anda tentukan saat membuatnya. Karena siapa pun yang memiliki token dapat menggunakannya untuk mengakses akun Penyimpanan Anda, sehingga Anda harus menentukan token dengan izin paling ketat yang masih memungkinkan token untuk menyelesaikan tugas yang diperlukan.

Praktik terbaik untuk pembuatan token termasuk membatasi izin:

  • Layanan: blob, file, antrean, tabel
  • Jenis sumber daya: layanan, kontainer, atau objek
  • Izin seperti membuat, membaca, menulis, memperbarui, dan menghapus

Menambahkan dependensi yang diperlukan ke aplikasi Anda

Sertakan dependensi yang diperlukan untuk membuat token SAS akun.

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

Mendapatkan variabel lingkungan untuk membuat informasi masuk kunci bersama

Gunakan nama dan kunci akun Blob Storage untuk membuat StorageSharedKeyCredential. Kunci ini diperlukan untuk membuat token SAS dan menggunakan token SAS.

Buat StorageSharedKeyCredential dengan menggunakan nama akun penyimpanan dan kunci akun. Kemudian, gunakan StorageSharedKeyCredential untuk menginisialisasi 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
);

Boilerplate operasi asinkron

Cuplikan kode sampel yang tersisa mengasumsikan kode boilerplate asinkron berikut untuk Node.js.

async function main() {

    const sasToken = await createAccountSas();

    await useSasToken(sasToken);
}

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

Membuat token SAS

Karena token ini dapat digunakan dengan blob, antrean, tabel, dan file, beberapa pengaturan lebih luas dari sekadar opsi blob.

  1. Buat objek opsi.

    Cakupan kemampuan token SAS ditentukan oleh AccountSASSignatureValues.

    Gunakan fungsi pembantu berikut yang disediakan oleh SDK untuk membuat jenis nilai yang benar untuk nilai:

  2. Teruskan objek ke fungsi generateAccountSASQueryParameters, bersama dengan SharedKeyCredential, untuk membuat token SAS.

    Sebelum mengembalikan token SAS, tambahkan pemisah string kueri, ?.

    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. Amankan token SAS hingga token digunakan.

Menggunakan Blob service dengan token SAS akun

Untuk menggunakan token SAS akun, Anda perlu menggabungkannya dengan nama akun untuk membuat URI. Teruskan URI untuk membuat blobServiceClient. Setelah memiliki blobServiceClient, Anda dapat menggunakan klien tersebut untuk mengakses Blob service Anda.

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

Paket dotenv digunakan untuk membaca nama akun penyimpanan Anda dari .env file. File ini tidak boleh diperiksa ke kontrol sumber.

Baca juga