【发布时间】:2017-06-08 22:30:14
【问题描述】:
大家好,我受困于 Azure 存储授权。当我只上传一个文件(blob)时,我将 SAS 密钥放在 url 中,一切正常。但是当我需要在 BLOB 服务中创建块时,创建它们时必须有授权标头(亚马逊说)。我正在尝试使用this article 创建授权。
有我的 JavaScript 代码(我使用 ng-file-uploader 库):
$scope.upload = function (file) {
blockId = blockId + 1;
Upload.upload({
url: "https://MYSTORAGENAME.blob.core.windows.net/kont1/"+ file.name + "?comp=block&blockid=" + blockId,
method: 'PUT',
resumeChunkSize: '40MB', // upload in chunks of specified size
headers: {
'Content-type': 'multipart/form-data',
'Authorization': 'SharedKey' + "MYSTORAGENAME:iDrJ7OuggJ8uoIn5olNDeOvSAoMrpqckl5mUaT5/H/w=",
'x-ms-version': '2015-12-11',
'x-ms-date': new Date().toUTCString()
},
data: {file: file}
}).then(function (resp) {
console.log('Success ' + resp.config.data.file.name + 'uploaded. Response: ' + resp.data);
}, function (resp) {
console.log('Error status: ' + resp.status);
}, function (evt) {
var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
console.log('progress: ' + progressPercentage + '% ' + evt.config.data.file.name);
});
};
此请求返回:400(未以正确的格式提供身份验证信息。请检查授权标头的值。)
当我尝试改变这一点时: '授权':'SharedKey' + "MYSTORAGENAME:iDrJ7OuggJ8uoIn5olNDeOvSAoMrpqckl5mUaT5/H/w="
对此: '授权': "SharedKey sand2storage:iDrJ7OuggJ8uoIn5olNDeOvSAoMrpqckl5mUaT5/H/w="
然后返回:403(服务器验证请求失败。确保Authorization标头的值格式正确,包括签名。)
我在这上面花了 2 天时间,但还是没弄好,也许有人看到了我缺少的东西?提前谢谢你。
注意:
iDrJ7OuggJ8uoIn5olNDeOvSAoMrpqckl5mUaT5/H/w=
我在 Azure 页面中生成此密钥,每次尝试确保该密钥正确。
【问题讨论】:
-
您能分享一下您是如何计算
SharedKey值的吗? -
我只是从生成的“共享访问签名”中获取 sig 值。看看我在问题末尾插入的图片。
-
我也尝试使用 azure 节点库生成它: var blobSvc = azure.createBlobService("STORAGE_NAME","ACCESS_KEY","STORAGE_NAME.blob.core.windows.net"); var startDate = new Date(); var expiryDate = new Date(startDate); expiryDate.setMinutes(startDate.getMinutes() + 800); var ap = { AccessPolicy: { Permissions: azure.BlobUtilities.SharedAccessPermissions.WRITE, Start: startDate, Expiry: expiryDate }, }; var token = blobSvc.generateSharedAccessSignature('CONTAINER_NAME', 'myblob', ap);
-
关于如何生成共享密钥请参考这篇文章:Authentication for the Azure Storage Services
-
感谢您的帮助。但即使我生成了密钥,我仍然遇到同样的错误。 Gaurav Mantri 解决方案在很多方面都对我有用。根据我的经验,问题可能是我是免费试用用户。
标签: javascript angularjs node.js azure storage