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:
- The application works the first time (file downloaded). The second time I get the Exception.
- If I change the requested file name: the application works the first time (file downloaded). The second time I get the Exception.
- The next day I get immediately the same exception (at first run)
- Also if I delete bin and obj folders I get the error
- 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.
- 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!
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.
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.