Получение «AuthorizationPermissionMismatch» для контейнера publi c - PullRequest
1 голос
/ 24 марта 2020

Мы используем NodeJS @ azure / storage-blob SDK для доступа к контейнеру / блобам в нашей организации. У нас есть система, в которой пользователи могут получить доступ к закрытым контейнерам, войдя на наши серверы, и их учетные записи добавляются через нашего администратора к определенным ролям IAM ( Либо предоставляя им доступ для чтения / записи / удаления к BLOB-объектам ).

Теперь мы хотим, чтобы некоторые новые пользователи имели доступ к publi c container / blobs по умолчанию. Мы сделали контейнер publi c и ссылки publi c на эти контейнеры / BLOB-объекты хранения доступны по URL, но при попытке доступа к ним через NodeJS API мы получаем " AuthorizationPermissionMismatch"ошибка.

Код, который мы используем ниже:

function getBlobDirectories(result) {
   console.log(result);
}

function errorinlisting(err) {
   console.log(err);
}

const containerClient = global.getBlobService(this.storageAccount,req.user).getContainerClient(this.containerName);
let blobDirIterator = containerClient.listBlobsByHierarchy('/');
blobDirIterator.next().then(getBlobDirectories).catch(errorinlisting);

Функция getBlobService выглядит следующим образом:

exports.getBlobService = (storageAcc, user)=> {
    const account = storageAcc;
    const accountKey = storageaccountkeys[storageAcc]

    let blobServiceClient;

    const simpleTokenCredential = new SimpleTokenCredential(user.azureToken);
        blobServiceClient = new BlobServiceClient(
            `https://${account}.blob.core.windows.net`,
            simpleTokenCredential
        );
    return blobServiceClient;
}

Вызов listBlobsByHierarchy, в результате возникает ошибка, которая вызывает приведенный выше вызов функции errorinlisting с ошибкой " AuthorizationPermissionMismatch " ..

В чем может быть проблема? Это ошибка в NodeJS API?

Любая помощь будет неоценимой.

1 Ответ

0 голосов
/ 18 апреля 2020

Если ваш контейнер общедоступен c, вы можете попробовать создать экземпляр ContainerClient без учетных данных:

const { ContainerClient } = require("@azure/storage-blob")

const url = "<url to container with anonymous access>";
const containerClient = new ContainerClient(url);

async function main() {
    for await (const blob of containerClient.listBlobsFlat()) {
        console.log(blob.name);
    }
}

main().catch(error => {
    console.error(error);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...