【问题标题】:SAS token is expiring while Blob downloadSAS 令牌在 Blob 下载时到期
【发布时间】:2013-02-14 12:33:32
【问题描述】:

我有一个 SAS 令牌,它将在 2 分钟内过期。

SAS = AzureClient.GetCloudContainer().GetSharedAccessSignature(new SharedAccessPolicy()
{
    SharedAccessExpiryTime = DateTime.UtcNow + TimeSpan.FromMinutes(1)
}, "readonly");
var sasCreds = new StorageCredentialsSharedAccessSignature(SAS);
CloudStorageAccount _storageAccount = AzureClient.GetCloudStorageAccount();
CloudBlobClient sasBlobClient = new CloudBlobClient(_storageAccount.BlobEndpoint, sasCreds);

CloudBlob sasBlob = sasBlobClient.GetBlobReference("blobname");

其中 readonly 是策略名称。

现在我在做如下操作:

using (BlobStream stream = sasBlob.OpenRead())
{                       
    using (FileStream fileStream = File.OpenWrite(@"Smething.txt"))
    {
        BlobStreamReader(stream,fileStream);
    }
}

private void BlobStreamReader(BlobStream blob,Stream OutputStream)
{
    int buffersize = 4194304; // 4MB 
    byte[] data = new byte[buffersize];
    do
    {
        int bytesRead = blob.Read(data,0,buffersize);
        if (bytesRead == 0) break;
        OutputStream.Write(data,0,bytesRead);
    }
    while (true);            
}

问题是 SAS 过期后下载失败。我的理解是,SAS 令牌仅用于身份验证,如果在到期时间开始下载,那么即使 SAS 到期,下载也会继续。

【问题讨论】:

    标签: c#-4.0 azure-blob-storage blobstorage


    【解决方案1】:

    SAS 令牌仅用于身份验证是正确的。但是,在您的情况下,BlobStream 将在需要来自服务器的更多数据时发出新请求。因为每个请求都需要单独进行身份验证,并且您的 SAS 令牌在整个下载完成之前过期,所以预计会失败。

    如果要下载整个 blob,DownloadToStream 实际上是更好的选择,因为它只会向服务器发出单个请求,然后下载整个 blob。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 2020-05-30
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多