Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье показано, как создавать и использовать токены SAS учетной записи для использования библиотеки клиента Azure Blob Storage версии 12 для JavaScript. После подключения ваш код может работать с контейнерами, BLOB-объектами и функциями службы хранилища Blob.
Примеры фрагментов кода доступны на GitHub в виде исполняемых файлов Node.js.
Пакет (npm) | Примеры | Справочная документация по API | Исходный код библиотеки | Оставить отзыв
Токены SAS учетной записи
Маркер SAS учетной записи — это один из типов маркера SAS для делегирования доступа, предоставляемого службой хранилища Azure. Маркер SAS учетной записи предоставляет доступ к хранилищу Azure. Маркер является только ограничивающим, как определяется при его создании. Поскольку любой, у кого есть маркер, может использовать его для доступа к аккаунту хранения, следует определить маркер с самыми строгими разрешениями, которые всё ещё позволяют маркеру выполнить необходимые задачи.
Рекомендации по созданию маркеров включают ограничение разрешений:
- Службы: BLOB, файл, очередь сообщений, таблица
- Типы ресурсов: служба, контейнер или объект
- Такие разрешения, как создание, чтение, запись, обновление и удаление
Добавление необходимых зависимостей в приложение
Включите необходимые зависимости для создания маркера SAS учетной записи.
const {
BlobServiceClient,
generateAccountSASQueryParameters,
AccountSASPermissions,
AccountSASServices,
AccountSASResourceTypes,
StorageSharedKeyCredential,
SASProtocol
} = require('@azure/storage-blob');
require('dotenv').config()
Чтобы создать учетные данные общего ключа, получите переменные среды
Используйте имя и ключ учетной записи хранения BLOB-объектов для создания хранилища StorageSharedKeyCredential. Этот ключ необходим для создания маркера SAS и использования маркера SAS.
Создайте объект StorageSharedKeyCredential с помощью имени учетной записи хранения и ключа учетной записи. Затем используйте StorageSharedKeyCredential, чтобы инициализировать 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
);
Шаблон асинхронной операции
Остальные фрагменты кода примера предполагают следующий асинхронный стандартный код для Node.js.
async function main() {
const sasToken = await createAccountSas();
await useSasToken(sasToken);
}
main()
.then(() => {
console.log(`done`);
}).catch((ex) => {
console.log(`Error: ${ex.message}`)
});
Создайте маркер SAS
Поскольку этот токен можно использовать с blob-объектами, очередями, таблицами и файлами, некоторые параметры более общие, чем только параметры blob-объектов.
Создайте объект options.
Область возможностей маркера SAS определяется accountSASSignatureValues.
Используйте следующие вспомогательные функции, предоставляемые пакетом SDK, чтобы создать правильные типы значений для значений:
-
AccountSASServices.parse("btqf").toString():
- b: большой двоичный объект
- t: таблица
- q: запрос
- f: файл
-
resourceTypes: AccountSASResourceTypes.parse("sco").toString()
- s: служба
- c: контейнер, например контейнер двоичных больших объектов, таблица или очередь
- o: объект — blob, строка, сообщение
-
разрешения: AccountSASPermissions.parse("rwdlacupi")
- r: чтение
- w: писать
- d: удалить
- l: список
- f: фильтр
- a: add
- c: создать
- u: обновление
- t: доступ к тегам
- p: процесс — например, обработка сообщений в очереди
- i: установка политики неизменяемости
-
AccountSASServices.parse("btqf").toString():
Передайте объект функции generateAccountSASQueryParameters вместе с SharedKeyCredential, чтобы создать маркер SAS.
Перед возвратом маркера SAS предпоставьте разделитель строки запроса
?
.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}`; }
Обеспечьте безопасность токена SAS до его использования.
Используйте службу хранения BLOB с токеном SAS учетной записи
Чтобы использовать маркер SAS учетной записи, необходимо объединить его с именем учетной записи для создания URI. Передайте URI для создания blobServiceClient. Получив blobServiceClient, вы можете использовать этого клиента для доступа к службе блобов.
// 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}`));
Пакет dotenv
используется для чтения имени вашей учетной записи хранилища из файла .env
. Этот файл не следует добавлять в систему контроля версий.