Azure Blob服务REST API返回403错误:“0”;未指定请求日期标题";

Azure Blob服务REST API返回403错误:“0”;未指定请求日期标题";,azure,Azure,我尝试使用Blob服务REST API,列出容器(REST API): 因此,我从管理门户->托管服务、存储帐户&CDN->存储帐户中获取访问密钥,在这里我选择了我的存储(aziztest),并从查看访问密钥中获取密钥: 有两个键:主键和辅助键 然后使用我创建的字符串进行签名: 获取\n\n\n\n\n\n\n\n\n\n\n ms日期:2012年2月29日星期三06:05:13 GMT\nx ms版本:2009-09-19\n/aziztest\n编码:列表 并使用my storage的主访

我尝试使用Blob服务REST API,列出容器(REST API):

因此,我从管理门户->托管服务、存储帐户&CDN->存储帐户中获取访问密钥,在这里我选择了我的存储(aziztest),并从查看访问密钥中获取密钥: 有两个键:主键和辅助键

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

并使用my storage的主访问密钥创建授权标头: 授权:SharedKey aziztest:OJFROTO4ZY1oughKW8UJ3%2BgAZq33GWe15gPT/PK%2Bk%3D

然后向以下用户发出GET请求:

但我有一个错误: 身份验证失败服务器无法验证请求。确保包含签名的授权标头的值格式正确。\n请求ID:892d1f31-a20d-45a5-b16a-2f7c07519863\n时间:2012-02-29T00:02:44.2841133ZRequest date标头未指定


我的程序出了什么问题?

你所做的似乎很好,我想你是在遵循程序吗?我可以看到您在签名的字符串中使用了它们,但是您是否在请求头中实际包含了
x-ms-date
x-ms-version
?错误消息将表明您没有。有关身份验证过程的详细信息,请参见此处


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

我在将blob上载到azure存储容器时遇到了类似的错误,但使用javascript编码。将代码发布到此处的列表中。希望它对其他人有所帮助。

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

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

我花了一天时间调查错误“请求中的日期头不正确”——问题是通过PHP生成日期。正确的日期格式是
date(“D,dm Y H:i:st”)


我用“j”表示日期,但f.e.Wed,2018年5月9日10:20:30 GMT不正确,它必须是Wed,2018年5月9日10:20:30 GMT.

OK,现在我将标题设置为:“x-ms-version:2009-09-19\nx ms日期:Wed,2012年2月29日23:20:13 GMT\n授权:SharedKey aziztest:TXHOFDPTKvNZY83Z0XSAVVLCI9SRKXXC2RYZFRJ20L2ZFT2ZTXOAZ0%3D\n”。但是现在我得到了一个错误:“InvalidAuthenticationInfo身份验证信息的格式不正确。检查授权标头的值。\n问题ID:ad4d0c0b-8664-49a8-adda-ce2c9d35d72b\n时间:2012-02-29T17:20:13.3766711Z'我想再次说明错误消息告诉您该怎么做。返回到我提供的链接,并确保您遵循了生成身份验证头的所有步骤。也许你没有在散列之前对项目进行UTF-8编码?日期格式的祸害只会越来越严重。目前还不知道这个标题的用途是什么,但无论如何。。。确保你的约会是零。8月9日不起作用,8月9日起作用。现在转到下一个神秘的错误消息