Azure Blob存储返回未经授权的SAS生成的URL

7cjasjjr  于 2023-06-06  发布在  其他
关注(0)|答案(1)|浏览(119)

我正在尝试生成一个URL,用户可以在其中访问Azure上的Blob存储容器中的文件。blob存储容器受到IP地址的严格限制,然后我正在构建的服务将管理请求并生成一个URL,用户可以直接访问该文件。下面是用于生成URL的代码(我认为代码本身可能没问题)。

CloudBlobContainer container = BlobStorage.GetContainer(_accountStatementEmailConfig.BlobStorageContainerName);
CloudBlockBlob blob = container.GetBlockBlobReference(document.StoragePath);

if (!blob.Exists())
{
    return NotFound();
}

TimeSpan sasExpiryTime = TimeSpan.FromMinutes(_apiConfig.PresignedURLExpiryInMinutes);

SharedAccessBlobPermissions permissions = SharedAccessBlobPermissions.Read;

string sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy
{
    Permissions = permissions,
    SharedAccessExpiryTime = DateTime.UtcNow.Add(sasExpiryTime)
}, new SharedAccessBlobHeaders(), _apiConfig.SharedAccessSignaturePermissionsPolicyName);

string documentUrl = $"{blob.Uri.AbsoluteUri}{sasToken}";

代码生成了URL,但是当用户转到URL时,他们收到以下错误:

<Error>
    <Code>AuthorizationFailure</Code>
    <Message>
        This request is not authorized to perform this operation. RequestId:92d7ca35-501e-0016-2a65-973659000000 Time:2023-06-01T08:43:35.2439678Z
    </Message>
</Error>

这可能是我对SAS的错误假设,令牌将允许我绕过IP限制,因为我从白名单IP生成URL。是我采取了不正确的方法,还是我忽略了一些次要的东西?

ne5o7dgx

ne5o7dgx1#

正如Gaurav Mantri在评论中指出的那样,问题在于我对Azure如何处理权限的理解,因为我以前的所有经验都来自AWS。
在Azure中,存储帐户和容器具有单独的访问级别。通过将存储帐户设置为公共,并将每个单独的容器设置为私有,可以实现与AWS的私有+预设URL选项类似的功能。然后使用生成的SAS URL访问文件。

相关问题