No' Access-Control-Allow-Origin'创建BlobServiceWithSas时存在标头

时间:2017-06-27 16:28:34

标签: javascript azure-storage

这是我第一次使用Azure Storage JS API。我已按照Microsoft tutorial的指示进行操作。 我在节点服务器上生成SAS密钥并获得了成功的结果,但我仍然收到身份验证失败错误。我使用的是Microsoft Azure提供的库。我该如何解决这个问题?

function test() {
        Restangular.all('cdn/sas').post({container: 'photos'}).then(function (sas) {
                var blobUri = 'https://hamsar.blob.core.windows.net';
                var blobService = AzureStorage.createBlobServiceWithSas(blobUri, sas.token);
                blobService.listContainersSegmented(null, function (error, results) {
                    if (error) {
                        // List container error
                    } else {
                        // Deal with container object                            
                    }
                });
            }, function (error) {
                console.log("Error generating SAS: ", error);
            });
    }

错误讯息:

enter image description here enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

根据您的错误消息,我发现您创建了一个Service SAS令牌。但是,如果要列出存储帐户中的所有容器名称。您需要使用帐户SAS令牌。

注意:您也可以使用blobService.listBlobsSegmented,您应该确保您的服务sas令牌具有列出blob文件和设置容器名称的权限。

像这样:

blobService.listBlobsSegmented('mycontainer', null, function (error, results) 

如果您要列出所有容器,建议您按照这些codes生成帐户SAS。

这样的代码:

 var getPolicyWithFullPermissions = function(){
  var startDate = new Date();
  var expiryDate = new Date();
  startDate.setTime(startDate.getTime() - 1000);
  expiryDate.setTime(expiryDate.getTime() + 24*60*60*1000);

  var sharedAccessPolicy = {
    AccessPolicy: {
      Services: AccountSasConstants.Services.BLOB + 
                AccountSasConstants.Services.FILE + 
                AccountSasConstants.Services.QUEUE + 
                AccountSasConstants.Services.TABLE,
      ResourceTypes: AccountSasConstants.Resources.SERVICE + 
                     AccountSasConstants.Resources.CONTAINER +
                     AccountSasConstants.Resources.OBJECT,
      Permissions: AccountSasConstants.Permissions.READ + 
                   AccountSasConstants.Permissions.ADD +
                   AccountSasConstants.Permissions.CREATE +
                   AccountSasConstants.Permissions.UPDATE +
                   AccountSasConstants.Permissions.PROCESS +
                   AccountSasConstants.Permissions.WRITE +
                   AccountSasConstants.Permissions.DELETE +
                   AccountSasConstants.Permissions.LIST,
      Protocols: AccountSasConstants.Protocols.HTTPSORHTTP,
      Start: startDate,
      Expiry: expiryDate
    }
  };

  return sharedAccessPolicy;
};

              var sharedAccessSignature = azure.generateAccountSharedAccessSignature(environmentAzureStorageAccount, environmentAzureStorageAccessKey, getPolicyWithFullPermissions );

然后您可以使用帐户SAS列出帐户的容器。

结果:

enter image description here

有关服务sas和帐户sas之间差异的更多详细信息,您可以参考此article