HttpResponseMessage 重定向到私有 Azure Blob 存储

6

使用asp.net开发API

能否使用SAS密钥或azure blob SDK将用户重定向到私有Azure Blob存储?

例如,我想做这样的事情:

var response = Request.CreateResponse(HttpStatusCode.Moved);
response.Headers.Location = new Uri(bloburl);
return response;

有没有可能通过在URL中放置密钥来访问私有blob?显然,我不想放置主密钥。

1个回答

7
可以使用SAS密钥或Azure Blob SDK将用户重定向到私有Azure Blob存储。是的,完全可以将用户重定向到私有Blob。您需要创建一个具有至少读取权限的共享访问签名(SAS),并将该SAS令牌附加到Blob URL中,并重定向到该URL。您的代码应如下所示:
        var cred = new StorageCredentials(accountName, accountKey);
        var account = new CloudStorageAccount(cred, true);
        var client = account.CreateCloudBlobClient();
        var container = client.GetContainerReference("container-name");
        var blob = container.GetBlockBlobReference("blob-name");
        var sasToken = blob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
        {
            Permissions = SharedAccessBlobPermissions.Read,
            SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1)//Assuming you want the link to expire after 1 hour
        });
        var blobUrl = string.Format("{0}{1}", blob.Uri.AbsoluteUri, sasToken);
        var response = Request.CreateResponse(HttpStatusCode.Moved);
        response.Headers.Location = new Uri(bloburl);
        return response;

太好了,谢谢!这正是我需要的。我不知道我可以将 SAS 密钥附加到 Blob URL 上并以此引用它。尝试实施后,我会回报结果的。 - JakeD
快速问题:每个 Blob 请求都创建一个新的 SAS 密钥是否会影响性能?另外,由于应用程序仅使用此 API 通过 Blob 链接下载单个图像,我假设每个链接在 1 分钟后过期是可以的吗?我想即使是对同一 Blob 的第二个连续请求也会创建一个新的 SAS 密钥。 - JakeD
1
每个 Blob 请求创建一个新的 SAS 密钥是否会在性能方面有任何不利影响? - 我想没有。创建 SAS 密钥不会产生任何网络调用,因此没有网络或 IO 开销。 - Gaurav Mantri
1
嗨@GauravMantri - 你能否更新你的答案,使用来自Azure.Storage.Blobs的最新API吗?我相信它在这里:https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blob-user-delegation-sas-create-dotnet - Sean Kearon
1
@seankearon - 当然,让我在这个周末处理它。 - Gaurav Mantri
@GauravMantri - 今天我自己试过了,你可以在 这个 Gist 中看到我的方法。 - Sean Kearon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接