10
votes

I've search here and in Google but I can't find a solution.

With my C# code I want to read a file from Azure Storage Blob. The code (only 6 line) works very well in another project (Windows 8.1 Universal App) but not in my new Windows 10 UWP App.

This is my code:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(azureConnectionString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("container-name");

CloudBlob b1 = container.GetBlobReference("27.76914.json");
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("stefano1.json", CreationCollisionOption.ReplaceExisting);
await b1.DownloadToFileAsync(file);

The Exception:

Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.

Using Fiddler4 I found this error on message 403:

The MAC signature found in the HTTP request 'R2t9hKsyXf470HF2LNP8T+M2nci0ddE/ojQ0r4UVjJQ=' is not the same as any computed signature

My attempts:

  1. The application works the first time (file downloaded). The second time I get the Exception.
  2. If I change the requested file name: the application works the first time (file downloaded). The second time I get the Exception.
  3. The next day I get immediately the same exception (at first run)
  4. Also if I delete bin and obj folders I get the error
  5. If I create another application and try to download the same file (same as point 1), it works the first time, but not the second.
  6. In a Console Application all works well.

This is the Fiddler4 Raw Request (where ***** is my Azure Storage Account Name):

GET https://*****.blob.core.windows.net/container-name/27.76914.json HTTP/1.1
x-ms-client-request-id: accee7e7-646d-417a-b734-1591cbc16a8d
x-ms-date: Thu, 03 Sep 2015 06:31:37 GMT
x-ms-version: 2015-02-21
User-Agent: WA-Storage/5.0.2 (Windows Runtime)
Authorization: SharedKey *****:R2t9hKsyXf470HF2LNP8T+M2nci0ddE/ojQ0r4UVjJQ=
Host: *****.blob.core.windows.net
If-Modified-Since: Sun, 30 Aug 2015 18:52:41 GMT
If-None-Match: "0x8D2B16C2ED82C4A"
Connection: Keep-Alive

Thank you!

2
Could you please post the raw request as you see it in Fiddler.Shaun Luttin
Did you get any solution on this issue as I'm having the same problem in UWP app?SWilko
No, I'm still waiting for a solution. My temporary workaround is a web service bridge between my UWP App and Azure Blob (because I'm in beta). So my UWP App use Azure Blob Storage API for upload and list blobs, but use my custom web service to download them.Stefano
Yes, this is the predicament IoT-core/UWP users are in at the moment. You can use (at your own risk) the storage client lib for uploads but have to add REST APIs to the services for download until the client lib is supported. See stackoverflow.com/questions/34594757/…GGleGrand

2 Answers

5
votes

This was also reported on our GitHub page here: https://github.com/Azure/azure-storage-net/issues/171

Our leading theory is that a caching proxy might be in between the client and the server affecting your requests.

We're still investigating and will let you know.

0
votes

I've had a similar issue (in Java) trying to access blobs from local machine. Trying to download a blob would work one out of two times, trying to get an InputStream never worked. In both cases the error was the same as yours.

My code always worked from a VM in the cloud. The issue was fixed when I've changed the default protocol from HTTP to HTTPS. When constructing your CloudStorageAccount, there is a constructor that allows you to specify the default protocol. It's also available for C# (here)

Also for the record, AZCopy will fail for a source with HTTP, with similar error. You might give it a try.