生成的 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=<DateTime>
,并在后面串联SAS
.
需要注意的是,这种方式生成SAS
时不需要添加BlobVersionId
属性。
最后,你的网址必须是这样的:https://myaccount.blob.core.windows.net/mycontainer/myblob?versionid=<DateTime>&<SAS>
。
【讨论】:
以上是关于生成的 Azure Blob 版本 SAS 问题的主要内容,如果未能解决你的问题,请参考以下文章
Azure CDN URL使用令牌身份验证和Blob存储SAS重写规则
如何在 Python 中生成 Azure blob SAS URL?
Azure SAS 令牌不适用于 Azure.Storage.Blobs BlobServiceClient
为 Azure Blob 生成预签名 URL 引发空指针异常