C# Azure存储:403服务器无法验证请求

C# Azure存储:403服务器无法验证请求,c#,azure,azure-storage-blobs,uwp,C#,Azure,Azure Storage Blobs,Uwp,我在这里和谷歌搜索过,但我找不到解决方案 用我的C代码,我想从Azure存储Blob中读取一个文件。 代码(只有6行)在另一个项目(Windows8.1UniversalApp)中运行得很好,但在我的新Windows10UWP应用程序中运行得不好 这是我的代码: CloudStorageAccount storageAccount = CloudStorageAccount.Parse(azureConnectionString); CloudBlobClient blobClient = st

我在这里和谷歌搜索过,但我找不到解决方案

用我的C代码,我想从Azure存储Blob中读取一个文件。 代码(只有6行)在另一个项目(Windows8.1UniversalApp)中运行得很好,但在我的新Windows10UWP应用程序中运行得不好

这是我的代码:

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);
例外情况:

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

我使用Fiddler4在消息403中发现了此错误:

在HTTP请求“R2t9hKsyXf470HF2LNP8T+M2nci0ddE/OJQ0R4UVJQ=”中找到的MAC签名与任何计算签名不同

我的尝试:

  • 应用程序第一次工作(文件下载)。第二次我得到了例外
  • 如果我更改请求的文件名:应用程序第一次工作(文件已下载)。第二次我得到了例外
  • 第二天,我立即得到相同的异常(第一次运行时)
  • 此外,如果我删除bin和obj文件夹,我会得到错误
  • 如果我创建了另一个应用程序并尝试下载同一个文件(与第1点相同),它第一次工作,但第二次不工作
  • 在控制台应用程序中,所有这些都可以正常工作
  • 这是Fiddler4原始请求(其中******是我的Azure存储帐户名):


    谢谢大家!

    我们的GitHub页面也报告了这一点:

    我们的主要理论是,缓存代理可能位于客户端和服务器之间,影响您的请求

    我们仍在调查中,会让您知道。

    我在尝试从本地计算机访问blob时遇到了类似的问题(在Java中)。 尝试下载一个blob会有两次中的一次成功,尝试获取一个InputStream却从未成功过。在这两种情况下,错误与您的相同

    我的代码总是在云中的虚拟机上运行。 当我将默认协议从HTTP更改为HTTPS时,该问题已得到修复。 构造CloudStorageAccount时,有一个构造函数允许您指定默认协议。C#()

    同样对于记录,AZCopy对于具有HTTP的源将失败,并出现类似错误。
    你可以试一试

    你可以发布你在Fiddler中看到的原始请求吗?我在UWP应用程序中遇到了同样的问题,你对此问题有什么解决方案吗?没有,我还在等待解决方案。我的临时解决方案是我的UWP应用程序和Azure Blob之间的web服务桥梁(因为我正在测试中)。因此,我的UWP应用程序使用Azure Blob存储API上载和列出Blob,但使用我的自定义web服务下载它们。是的,这是IoT核心/UWP用户目前面临的困境。您可以(自担风险)使用存储客户机库进行上载,但必须将REST API添加到服务中进行下载,直到支持客户机库为止。总体来看,我们实际上还不支持Windows 10通用应用程序,这就是为什么我们还没有太多信息的原因。:)谢谢你,彼得,我没有看到那一页。我希望你能找到一个解决办法。好的,现在我可以确认,在UWP代码中存在某种缓存机制,即使在连接使用HTTPS时也会发生这种情况。我们将不得不进行更多的调查,但这可能需要对我们的代码进行某种更改——不幸的是,这可能意味着这将在短期内属于“UWP当前不受支持”的范畴。希望我们能够确定问题,并为即将发布的版本提供修复方案。再次感谢您的错误报告。您好@PeterMarino MSFT是否有关于UWP这个问题的更新,因为我得到了完全相同的错误。谢谢看起来我遇到了同样的问题有趣的是,它工作了一段时间,然后就退出了:告诉我它是哪个缓存:-)。。。所以我可以删除它,让它重新工作。不,说真的,我非常感谢你能给我一个确定的答案。如果无法修复,那么我将不得不删除大量存储库代码…这有点不同,但感谢您的建议!始终建议使用HTTPS。
    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