Azure存储连接错误(如果系统时间差异)

问题描述:

我连接到windows phone 8.1上的blob azure存储。如果请求日期〜系统时间,它工作正常。但是如果系统日期在手机上有区别...例如1天...然后有错误总是...Azure存储连接错误(如果系统时间差异)

public static async Task<AzureDownloadResult> DownloadFileFromBlob(string FileName) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     try 
     { 
      CloudBlobContainer container = GetBlobClient.GetContainerReference("data"); 
      CloudBlockBlob blockBlob = container.GetBlockBlobReference(FileName); 
      if (!await blockBlob.ExistsAsync()) 
      { 
       return new AzureDownloadResult(null, AzureDownloadException.NotExists); 
      } 
      long filesize = blockBlob.Properties.Length; 
      await blockBlob.DownloadToStreamAsync(ms.AsOutputStream()); 
      if (ms.Length != filesize) 
      { 
       return new AzureDownloadResult(null, AzureDownloadException.Error); 
      } 
     } 
     catch (Exception e) 
     { 
      //<-error there (if i set random time in phone time settings): 
      //message: ...Make sure the value of Authorization header is formed correctly including the signature.. 
      return new AzureDownloadResult(null, AzureDownloadException.NoneInternetConnectionOrDateTimeError); 
     } 
     return new AzureDownloadResult(ms.ToArray(), AzureDownloadException.OK); 
    } 
} 

的Azure存储REST API,在其他所有库建成,使用日期作为请求参数之一提供熵创建HMAC认证时该请求的标记。以下是documented

存储服务保证的请求是年龄不超过15分钟 的时候到达的服务。这防范了某些 安全攻击,包括重播攻击。当此检查失败时, 服务器返回响应代码403(禁止)。

因此,您应该确保与请求关联的日期时间在15分钟窗口内。

+0

这将是很好,如果我可以手动设置请求的日期,否则我必须给用户一个消息,日期和时间设置不正确...我会尝试使用其他身份验证方法......谢谢链接! – zxc1 2014-11-02 22:14:59

+0

所以你宁愿让你的解决方案不太安全?看起来很奇怪。对于高延迟连接的长时间运行请求,超时是生活中的事实。你的应用应该适当地处理这种情况。 – 2014-11-03 05:35:10