【问题标题】:Getting "AuthorizationPermissionMismatch" on a public container在公共容器上获取​​“AuthorizationPermissionMismatch”
【发布时间】:2020-07-04 22:07:38
【问题描述】:

我们使用 NodeJS @azure/storage-blob SDK 来访问我们组织中的存储容器/blob。我们开发了一个系统,其中用户可以通过登录我们的服务器来访问私有容器,并通过我们的管理员将他们的帐户添加到某些 IAM 角色(授予他们对 blob 的读/写/删除访问权限)。

现在,我们想让一些新用户默认访问公共容器/blob。我们已经公开了一个容器,并且这些 存储容器/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 中的错误吗?

任何帮助都是无价的。

【问题讨论】:

  • req.user 中的global.getBlobService(this.storageAccount,req.user) 是什么?
  • @GauravMantri 我现在已经更新了答案。 azureToken 是我使用 Microsoft 链接登录时获得的访问令牌。
  • 谢谢。请看看这是否回答了您的问题:stackoverflow.com/questions/52769758/….
  • 不,它没有。

标签: azure azure-active-directory azure-storage azure-blob-storage


【解决方案1】:

如果您的容器是可公开访问的,您可能想尝试在没有凭据的情况下创建 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);
})

【讨论】:

    猜你喜欢
    • 2020-04-05
    • 2018-09-21
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多