Azure Storage: 403 Server failed to authenticate t

2019-01-25 09:07发布

问题:

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!

回答1:

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.



回答2:

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.