【发布时间】: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