上载到azure blob容器未能验证请求

时间:2019-03-09 13:38:48

标签: c# azure asp.net-core .net-core xamarin.android

在Azure上上传到容器时,我收到此错误:

  

服务器无法验证请求。确保值   授权标头的格式正确,包括签名。

我知道问题是由不同的时区引起的。

但是在我的应用程序中,我不能依靠时区来使漏洞生效。我需要一种忽略时区的解决方案,将文件发送到容器。

我没有使用SAS。

这是我要上传的代码:

    public async Task<bool> SendPhotosAsync(int examID)
    {
        try
        {
            CancellationTokenSource cts = new CancellationTokenSource();
            cts.CancelAfter(Constants.SendExamPhotosAsyncTimeout);

            foreach (var image in GetExamFacePhotos(examID))
            {
                var fileName = Path.GetFileName(image);

                CloudStorageAccount storageAccount = CloudStorageAccount.Parse(Constants.AzureBlobStorageConnectionString);

                // Create the blob client.
                CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

                // Retrieve reference to a previously created container.
                CloudBlobContainer container = blobClient.GetContainerReference(Constants.AzureBlobContainerExamFacePhotos);

                // Retrieve reference to a blob named "myblob".
                CloudBlockBlob blockBlob = container.GetBlockBlobReference(fileName);

                // Create or overwrite the "myblob" blob with contents from a local file.
                using (var fileStream = File.OpenRead(image))
                {
                   if (fileStream.Length > 0)
                   {
                       await blockBlob.UploadFromStreamAsync(fileStream, fileStream.Length, null, null, null, cts.Token);
                   }
                }
           }

           return true;
    }
    catch (TaskCanceledException)
    {
        throw new Exception(_context.GetString(Resource.String.error_task_canceled));
    }
    catch (Exception)
    {
        throw new Exception(_context.GetString(Resource.String.error_send_exam_media));
    }
}

编辑1

要重现@Gaurav所说的内容,我将设备的GMT更改为0,并保留了当前的GMT(-3),GMT-0 09:02的时间,并将其保存在ExtendedErrorInformation上:

  

请求日期标头太旧:“星期一,2019年3月11日09:02:25 GMT”

Azure同时检查请求的时间和GMT。如果不匹配,则会显示错误。

更改为GMT-4并将时间设置为正确的时区GMT-4 08:15,请求已成功完成

因此,时区无关紧要,因为时间与其时区匹配。

0 个答案:

没有答案