Criar e usar tokens SAS de conta com o Armazenamento de Blobs do Azure e JavaScript
Este artigo mostra como criar e usar tokens SAS de conta para usar a biblioteca de cliente do Armazenamento de Blobs do Azure v12 para JavaScript. Uma vez conectado, seu código pode operar em contêineres, blobs e recursos do serviço de Armazenamento de Blobs.
Os trechos de código de exemplo estão disponíveis no GitHub como arquivos executáveis do Node.js.
Pacote (npm) | Exemplos | Referência da API Código-fonte | | da biblioteca Enviar comentários
Tokens SAS da conta
Um token SAS de conta é um tipo de token SAS para delegação de acesso fornecido pelo Armazenamento do Azure. Um token SAS de conta fornece acesso ao Armazenamento do Azure. O token é tão restritivo quanto você o define ao criá-lo. Como qualquer pessoa com o token pode usá-lo para acessar sua conta de armazenamento, você deve definir o token com as permissões mais restritivas que ainda permitem que o token conclua as tarefas necessárias.
As práticas recomendadas para a criação de tokens incluem a limitação de permissões:
- Serviços: blob, arquivo, fila, tabela
- Tipos de recursos: serviço, contêiner ou objeto
- Permissões como criar, ler, escrever, atualizar e excluir
Adicionar dependências necessárias ao seu aplicativo
Inclua as dependências necessárias para criar um token SAS de conta.
const {
BlobServiceClient,
generateAccountSASQueryParameters,
AccountSASPermissions,
AccountSASServices,
AccountSASResourceTypes,
StorageSharedKeyCredential,
SASProtocol
} = require('@azure/storage-blob');
require('dotenv').config()
Obter variáveis de ambiente para criar credenciais de chave compartilhadas
Use o nome e a chave da conta de Armazenamento de Blob para criar uma StorageSharedKeyCredential. Essa chave é necessária para criar o token SAS e usar o token SAS.
Crie um StorageSharedKeyCredential usando o nome da conta de armazenamento e a chave da conta. Em seguida, use o StorageSharedKeyCredential para inicializar um 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
);
Operação assíncrona clichê
Os trechos de código de exemplo restantes assumem o seguinte código clichê assíncrono para Node.js.
async function main() {
const sasToken = await createAccountSas();
await useSasToken(sasToken);
}
main()
.then(() => {
console.log(`done`);
}).catch((ex) => {
console.log(`Error: ${ex.message}`)
});
Criar token SAS
Como esse token pode ser usado com blobs, filas, tabelas e arquivos, algumas das configurações são mais amplas do que apenas opções de blob.
Crie o objeto options.
O escopo das habilidades de um token SAS é definido pelo AccountSASSignatureValues.
Use as seguintes funções auxiliares fornecidas pelo SDK para criar os tipos de valor corretos para os valores:
- AccountSASServices.parse("btqf").toString():
- B: Blob
- T: Tabela
- P: Consulta
- f: ficheiro
- resourceTypes: AccountSASResourceTypes.parse("sco").toString()
- s: serviço
- c: container - como contêiner blob, tabela ou fila
- o: objeto - blob, linha, mensagem
- permissões: AccountSASPermissions.parse("rwdlacupi")
- r: ler
- w: escrever
- D: Suprimir
- L: Lista
- f: filtro
- R: Adicionar
- C: Criar
- u: atualizar
- t: acesso à tag
- p: processo - como processar mensagens em uma fila
- I: Definir política de imutabilidade
- AccountSASServices.parse("btqf").toString():
Passe o objeto para a função generateAccountSASQueryParameters, juntamente com SharedKeyCredential, para criar o token SAS.
Antes de retornar o token SAS, anexe o delimitador de cadeia de caracteres de consulta,
?
.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}`; }
Proteja o token SAS até que ele seja usado.
Usar o serviço Blob com o token SAS da conta
Para usar o token SAS da conta, você precisa combiná-lo com o nome da conta para criar o URI. Passe o URI para criar o blobServiceClient. Depois de ter o blobServiceClient, você pode usar esse cliente para acessar seu serviço de Blob.
// 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}`));
O dotenv
pacote é usado para ler o nome da conta de armazenamento de um .env
arquivo. Esse arquivo não deve ser verificado no controle do código-fonte.