Azure Blob Service REST API 返回 403 错误:"Request date header not specified"



我尝试使用Blob服务REST API,列表容器(REST API):http://msdn.microsoft.com/en-us/library/windowsazure/dd179352.aspx

所以我从管理门户->托管服务、存储帐户和;CDN->存储帐户,我在其中选择了我的存储(aziztest)并从查看访问密钥中获取密钥:有两个键Primary和Secondary。

然后使用我创建的字符串进行签名:获取\n\n\n\n\n\n\n\n \nx ms日期:2012年2月29日星期三06:05:13 GMT\nx ms版本:2009-09-19\n/aziztest\ncomp:list

并使用我的存储的主访问密钥制作Authorization头:授权:共享密钥方位测试:OjfrOTuO4zy1oUWGHkw8uj3%2BgAZq33GWe15gPT/PK%2Bk%3D

然后向以下对象发出GET请求:http://aziztest.blob.core.windows.net/?comp=list

但我得到了一个错误:AuthenticationFailed服务器无法对请求进行身份验证。确保Authorization标头的值格式正确,包括签名。\nRequestId:892d1f31-a20d-45a5-b16a-2f7c07519863\n时间:2012-02-29T00:02:44.2841133Z未指定请求日期标头

我的手术出了什么问题?

您所做的似乎很好,我想您正在遵循MSDN上关于如何创建身份验证标头的说明?我可以看到你在签名的字符串中使用了它们,但你是否在请求头中包含了x-ms-datex-ms-version?错误消息表明您没有。

我在将blob上传到azure存储容器但使用javascript进行编码时遇到了类似的错误。在此处发布代码列表的链接。希望它能帮助到别人。

我花了一天时间调查错误"请求中的Date标头不正确",问题是通过PHP生成日期。正确的日期格式为date("D, d M Y H:i:s T");

我用"j"表示日期,但f.e.2018年5月9日星期三10:20:30 GMT不正确,必须是2018年5日星期三10:00 20:30 GMT。

有关身份验证过程的详细信息可以在此处找到http://msdn.microsoft.com/en-us/library/dd179428.aspx

我的猜测是,x-ms-date距离服务器收到请求的时间超过了15分钟。

我在php应用程序中遇到了同样的问题,问题是文件名编码重音,所以我最终将文件名转换为base64,如下所示:

 $ext=explode(".",$_FILES["file"]["name"]);
  $_FILES["file"]["name"]=str_replace("=","",base64_encode($_FILES["file"]["name"])).".".$ext[count($ext)-1];

对于任何试图通过Logic应用程序执行此操作的人,日期标头的自定义格式为:

formatDateTime(utcNow(), 'ddd, dd MMM yyyy HH:mm:ss') GMT

最新更新