azure服务器无法验证请求确保包括签名在内的授权标头的值格式正确

4sup72z8  于 2021-09-13  发布在  Java
关注(0)|答案(1)|浏览(479)

enter code here 我正在尝试使用javascript下载存储在azure blob中的文件,并出现此错误。
这是我的密码

function getUrlOfAttachmentFileFromBlob(new_fileurl,new_fileName) {
  var fileHyperlink = '';
  var blobUri = 'https://' + 'Storage_Account_Name' + '.blob.core.windows.net';
  var containerName = 'trial';
  var sas_token = 'sastoken' ;

  var blobService = AzureStorage.Blob.createBlobServiceWithSas(blobUri, sas_token);
  //.withFilter(new AzureStorage.Blob.ExponentialRetryPolicyFilter());

  var downloadLink = blobService.getUrl(new_fileName, new_fileurl.replace('/'+containerName+'/',''), sas_token);

  if (downloadLink != null)
  {
      alert("Link " + downloadLink);
      downloadURI(downloadLink, new_fileName);
  }
}

我没有在这里生成共享签名和sas令牌。我直接将sas令牌分配给变量。
当我试图在浏览器中打开链接时,我遇到了此错误

AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:504f2ef5-f01e-0021-0e02-74e194000000
Time:2021-07-08T14:09:47.9951927Z</Message><AuthenticationErrorDetail>sp is mandatory. Cannot be empty</AuthenticationErrorDetail></Error>

我没有在代码中传递任何头。
我错过了什么?
sas令牌=?sp=r&st=2021-07-08t12:19:08z&se=2021-07-08t20:19:08z&spr=https&sv=2020-02-10&sr=c&
没有sig部分。
这是我从geturl函数得到的=
?%3fsv=2020-02-10&ss=bfqt&srt=sco&sp=rwdlacuptfx&se=2021-07-11t12%3a30%3a23z&st=2021-06-11t04%3a30%3a23z&spr=https%2chttp&
我想我没有从这个函数中得到正确的url,所以我用这个替换了这一行

const downloadLink = blobUri +'/' + containerName + '/' + new_fileName + sas_token;

但仍然无法下载该文件。但是没有得到身份验证错误。
非常感谢。

qxsslcnc

qxsslcnc1#

出现此错误的原因是您的sas令牌无效。如果仔细查看错误消息,您将看到以下内容:

<AuthenticationErrorDetail>sp is mandatory. Cannot be empty</AuthenticationErrorDetail>

基本上,您的sas令牌丢失了 signed permissions (sp) 参数请检查您的sas令牌并确保其格式正确。

相关问题