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.
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:
- AccountSASServices.parse("btqf").toString():
- b: blob
- t: tabel
- q: query
- f: bestand
- resourceTypes: AccountSASResourceTypes.parse("sco").toString()
- s: service
- c: container- zoals blobcontainer, tabel of wachtrij
- o: object - blob, rij, bericht
- machtigingen: AccountSASPermissions.parse("rwdlacupi")
- r: lezen
- w: schrijven
- d: verwijderen
- l: lijst
- f: filter
- a: toevoegen
- c: maken
- u: bijwerken
- t: tagtoegang
- p: proces - zoals berichten in een wachtrij verwerken
- i: beleid voor onveranderbaarheid instellen
- AccountSASServices.parse("btqf").toString():
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}`; }
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.