不能用密钥写blob

问题描述 投票:1回答:1

我有一个问题要写入azure Storage Container blob。我发布了http对azure网站的请求。我尝试过不同的密钥,包括SAS。

我总是收到错误403:服务器无法验证请求。确保正确形成Authorization标头的值,包括签名。

so I suppose the url was found 
can you please help me

the code is as follows

let url = "https://matasisrael.blob.core.windows.net/matas/routes.json";
const httpOptions = {
        headers: new HttpHeaders({
        'x-ms-version': '2015-02-21',
        'x-ms-date': '2019-04-09',
        'Content-Type': 'application/json; charset=UTF-8',
        'x-ms-blob-type': 'BlockBlob',
        'Authorization': 'SharedKey myaccount:<access key>,

        'Vary': 'Origin',
        'Content-Length':"1024"

      })
    };
     this.http.put(url,"{hel:ds}",httpOptions).subscribe(data=> {})
angular azure blob
1个回答
1
投票

由于您是通过Angular应用程序上传blob,因此建议您使用SAS令牌。使用SAS Token,您实际上不需要提供Authorization标头。

您要做的是使用blob URL和SAS Token创建SAS Url,并使用该URL执行HTTP PUT请求。由于SAS令牌已包含存储服务版本,因此您无需在请求标头中包含x-ms-version。此外,您不需要x-ms-date标头。

所以你的代码将是这样的:

let url = "https://matasisrael.blob.core.windows.net/matas/routes.json?" + sasToken;
let requestBody = "{hel:ds}";
const httpOptions = {
        headers: new HttpHeaders({
        'Content-Type': 'application/json; charset=UTF-8',
        'x-ms-blob-type': 'BlockBlob',
        'Content-Length': requestBody.length
      })
    };
this.http.put(url, requestBody, httpOptions).subscribe(data=> {})
© www.soinside.com 2019 - 2024. All rights reserved.