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分钟窗口内。
这将是很好,如果我可以手动设置请求的日期,否则我必须给用户一个消息,日期和时间设置不正确...我会尝试使用其他身份验证方法......谢谢链接! – zxc1 2014-11-02 22:14:59
所以你宁愿让你的解决方案不太安全?看起来很奇怪。对于高延迟连接的长时间运行请求,超时是生活中的事实。你的应用应该适当地处理这种情况。 – 2014-11-03 05:35:10