生成的 Azure Blob 版本 SAS 问题

Posted

技术标签:

【中文标题】生成的 Azure Blob 版本 SAS 问题【英文标题】:Generated Azure Blob Version SAS Issue 【发布时间】:2020-10-28 05:46:57 【问题描述】:

我正在尝试生成一个 blob 版本 SAS 以允许对某个特定版本的 blob 进行读取访问。我让 SAS 生成为根 blob 工作,并尝试通过添加 BlobVersionId 为 blob 版本控制功能修改它,但是服务器返回 403。

针对特定 blob 版本修改的 SAS Builder:(不工作

public string GetBlobSasTokenAsync(string containerName, string blobName, string blobVersionId, string fileName)
    
        var sasBuilder = new BlobSasBuilder()
        
            BlobContainerName = containerName,
            BlobName = blobName,
            BlobVersionId = blobVersionId,
            StartsOn = DateTime.UtcNow.Subtract(_clockSlew),
            ExpiresOn = DateTime.UtcNow.AddMinutes(AccessDuration) + _clockSlew,
            ContentDisposition = "inline; filename=" + fileName,
            ContentType = GetContentType(fileName)
        ;

        sasBuilder.SetPermissions("r");

        var storageSharedKeyCredential = new StorageSharedKeyCredential(_accountName, _accountKey);

        var sasQueryParameters = sasBuilder.ToSasQueryParameters(storageSharedKeyCredential);

        return sasQueryParameters.ToString();
    

SAS URI: https://xyz.blob.core.windows.net/container/blobname?sv=2019-12-12&st=2020-07-07T20%3A44%3A38Z&se=2020-07-07T22%3A14%3A38Z&sr=bv&sp=r&rscd=inline%3B+filename%3Dfilename.txt&rsct=text%2Fplain&sig=xyz

错误:

<?xml version="1.0" encoding="utf-8"?>
<Error>
    <Code>AuthenticationFailed</Code>
    <Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:63b83bb8-201e-00a8-55a1-544fe3000000
Time:2020-07-07T21:01:08.2149986Z</Message>
    <AuthenticationErrorDetail>The specified signed resource is not allowed for the this resource level</AuthenticationErrorDetail>
</Error>

使用: Azure.Storage.Blobs 12.5.0-preview.5

【问题讨论】:

【参考方案1】:

我尝试过生成SAS并以你的方式访问blob,但发现不行,你可以使用官方推荐的way:https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=&lt;DateTime&gt;,并在后面串联SAS .

需要注意的是,这种方式生成SAS时不需要添加BlobVersionId属性。

最后,你的网址必须是这样的:https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=&lt;DateTime&gt;&amp;&lt;SAS&gt;

【讨论】:

以上是关于生成的 Azure Blob 版本 SAS 问题的主要内容,如果未能解决你的问题,请参考以下文章

Azure CDN URL使用令牌身份验证和Blob存储SAS重写规则

如何在 Python 中生成 Azure blob SAS URL?

Azure SAS 令牌不适用于 Azure.Storage.Blobs BlobServiceClient

为 Azure Blob 生成预签名 URL 引发空指针异常

尝试使用 SAS 访问 Azure blob 时收到“签名不匹配。使用的签名字符串是...”

Azure 存储帐户生成 SAS 令牌,而不是 SAS URI