2014-11-02 62 views
0

我連接到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); 
    } 
} 

回答

2

的Azure存儲REST API,在其他所有庫建成,使用日期作爲請求參數之一提供熵創建HMAC認證時該請求的標記。以下是documented

存儲服務保證的請求是年齡不超過15分鐘 的時候到達的服務。這防範了某些 安全攻擊,包括重播攻擊。當此檢查失敗時, 服務器返回響應代碼403(禁止)。

因此,您應該確保與請求關聯的日期時間在15分鐘窗口內。

+0

這將是很好,如果我可以手動設置請求的日期,否則我必須給用戶一個消息,日期和時間設置不正確...我會嘗試使用其他身份驗證方法......謝謝鏈接! – zxc1 2014-11-02 22:14:59

+0

所以你寧願讓你的解決方案不太安全?看起來很奇怪。對於高延遲連接的長時間運行請求,超時是生活中的事實。你的應用應該適當地處理這種情況。 – 2014-11-03 05:35:10