如何使用Node设置Azure Blob存储CORS属性?

斯特凡

我一直在关注blob服务身份验证文档,以便通过移动服务在我的azure blob存储帐户上设置CORS属性。

我不知道我在做什么错。

服务器响应为:

在HTTP请求“ JI ... Tk =”中找到的MAC签名与任何计算出的签名都不相同。服务器使用以下字符串进行签名:'PUT

x-ms-date:Wed,19 Feb 2014 07:24:06 GMT x-ms-version:2013-08-15 / apporotest /?comp = properties'

当我在一端登录要签名的字符串(不传递contentMD5和内容类型)时,结果却是相同的字符串。所以我想我建立共享密钥的功能是错误的。

这应该建立:Base64(HMAC-SHA256(UTF8(StringToSign))):

function buildSharedKeyLite( verb, contentMD5, contentType, canonicalizedHeaders, canonicalizedResource ) {

        var stringToSign = verb + "\n" +
            contentMD5 + "\n" +
            contentType + "\n" +
            "" + "\n" + // date is to be empty because we use x-ms-date
            canonicalizedHeaders +
            canonicalizedResource;

        return crypto.createHmac('sha256', self.accountKey).update(encodeURIComponent(stringToSign)).digest('base64');
    }

但是,令我困惑的是,之前提到的Shared Key Lite文档要求内容的MD5以及要设置的内容类型。但是,带有字符串签名的服务器响应似乎并不期望这些。

如果共享密钥精简版的创建正确,那么我认为我没有正确处理MD-5内容或规范化标头的创建:

function setCors( cors ) {

        var url = MY_ACCOUNT_UTL + '/?restype=service&comp=properties';
        var canonicalizedResource = '/' + MY_ACCOUNT_NAME + '/?comp=properties';
        var corsMD5 = crypto.createHash('md5' ).update(MY_CORS_XML).digest('base64');
        var date = (new Date()).toUTCString();
        var headers = {

            'x-ms-version': '2013-08-15',
            'x-ms-date': date,
            'Host': MY_ACCOUNT_HOST
        };

        var canonicalizedHeaders = buildCanonicalizedHeaders( headers );

    // THIS
        var key = buildSharedKeyLite( 'PUT', corsMD5, 'text/plain; charset=UTF-8', canonicalizedHeaders, canonicalizedResource );

    // AND THIS, BOTH YIELD THE SAME SERVER RESPONSE    
    var key = buildSharedKeyLite( 'PUT', "", "", canonicalizedHeaders, canonicalizedResource );

        headers['Authorization'] = 'SharedKeyLite ' + MY_ACCOUNT_NAME + ':' + key;

        var options = {
            url: url,
            headers: headers
        };

        function onPropertiesSet(error, response, body) {
            if (!error && response.statusCode == 202) {
                console.log("CORS: OK");
            }
            else {
                console.log("CORS: "+ response.statusCode);
                console.log(body);
            }
        }
        request.put(options, onPropertiesSet); // require('request')
    }

    function buildCanonicalizedHeaders( headers ) {

        var xmsHeaders = [];
        var canHeaders = "";

        for ( var name in headers ) {
            if ( name.indexOf('x-ms-') == 0 ) )
                xmsHeaders.push( name );
            }
        }

        xmsHeaders.sort();

        for ( var i = 0; i < xmsHeaders.length; i++ ) {
            name = xmsHeaders[i];
            canHeaders = canHeaders + name.toLowerCase().trim() + ':' + headers[name] + '\n';
        }
        return canHeaders;
    }

我真的很感谢任何指示。

高拉夫·曼特里(Gaurav Mantri)

我不确定100%,但我相信encodeURIComponent这会给您带来麻烦。例如,看下面的代码:

var a = "PUT\n\n\nFeb 2014 09:08:18 GMT\nx-ms-version:2013-08-15\n/cynapta/?comp=properties";
var b = encodeURIComponent(a);
console.log(a);
console.log("\n");
console.log(b);

这是在控制台上显示的方式ab方式:

在此处输入图片说明

您可以尝试删除encodeURIComponent并直接通过stringToSign签名计算吗?

更新

查看here用于签署请求的源代码,并假设您将存储帐户密钥作为字符串传递,可以在buildSharedKeyLite函数中尝试以下操作

return crypto.createHmac('sha256', new Buffer(self.accountKey, 'base64')).update(stringToSign).digest('base64');

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Azure存储Blob:在Blob级别设置CORS?

来自分类Dev

Azure存储Blob:在Blob级别设置CORS?

来自分类Dev

如何在Portal的Azure BLOB存储中设置CORS?

来自分类Dev

Windows Azure:使用NodeJS设置Blob CORS属性

来自分类Dev

如何使用Node.js在Azure Blob存储上设置ContentType

来自分类Dev

如何使用Node.js在Azure Blob存储上设置ContentType

来自分类Dev

使用ASP.NET在Windows Azure Blob存储上设置CORS

来自分类Dev

Azure Blob存储-基于容器的CORS(而非基于帐户)

来自分类Dev

Azure Blob存储-基于容器的CORS(而非基于帐户)

来自分类Dev

使用 Java 在 Azure Blob 存储中读取文件的文件属性

来自分类Dev

尝试在Azure存储帐户/ Blob上设置cors时出现无尽错误

来自分类Dev

Azure Blob存储REST API:为什么“获取Blob属性”和“获取Blob”请求相同?

来自分类Dev

如何使用Azure.Storage.Blobs程序集在Azure Blob存储操作上设置重试策略?

来自分类Dev

是否可以通过 AZ Copy 设置 blob 存储的属性

来自分类Dev

如何使用 Node.js SDK 从 Azure Blob 存储读取附加 Blob 到字符串?

来自分类Dev

如何使用azure-cli在Azure上设置Blob的contentType?

来自分类Dev

使用Https的Azure Blob存储

来自分类Dev

从Terraform在Azure存储帐户中设置CORS

来自分类Dev

Azure Blob存储授权

来自分类Dev

Azure存储:Blob与表

来自分类Dev

Azure Blob 存储

来自分类Dev

在 Azure Blob 存储中设置和检索 Blob 的元数据

来自分类Dev

以编程方式从Azure Blob存储连接字符串中提取属性

来自分类Dev

如何使用 Node.js 公开 Azure 文件存储 URL?

来自分类Dev

使用Node.js在Azure Blob上设置content-md5?

来自分类Dev

Blob存储上的CORS错误

来自分类Dev

如何列出Azure存储容器和Blob

来自分类Dev

如何从 azure blob 存储访问图像

来自分类Dev

无法使用适用于Python的Azure SDK设置Azure Blob的属性

Related 相关文章

  1. 1

    Azure存储Blob:在Blob级别设置CORS?

  2. 2

    Azure存储Blob:在Blob级别设置CORS?

  3. 3

    如何在Portal的Azure BLOB存储中设置CORS?

  4. 4

    Windows Azure:使用NodeJS设置Blob CORS属性

  5. 5

    如何使用Node.js在Azure Blob存储上设置ContentType

  6. 6

    如何使用Node.js在Azure Blob存储上设置ContentType

  7. 7

    使用ASP.NET在Windows Azure Blob存储上设置CORS

  8. 8

    Azure Blob存储-基于容器的CORS(而非基于帐户)

  9. 9

    Azure Blob存储-基于容器的CORS(而非基于帐户)

  10. 10

    使用 Java 在 Azure Blob 存储中读取文件的文件属性

  11. 11

    尝试在Azure存储帐户/ Blob上设置cors时出现无尽错误

  12. 12

    Azure Blob存储REST API:为什么“获取Blob属性”和“获取Blob”请求相同?

  13. 13

    如何使用Azure.Storage.Blobs程序集在Azure Blob存储操作上设置重试策略?

  14. 14

    是否可以通过 AZ Copy 设置 blob 存储的属性

  15. 15

    如何使用 Node.js SDK 从 Azure Blob 存储读取附加 Blob 到字符串?

  16. 16

    如何使用azure-cli在Azure上设置Blob的contentType?

  17. 17

    使用Https的Azure Blob存储

  18. 18

    从Terraform在Azure存储帐户中设置CORS

  19. 19

    Azure Blob存储授权

  20. 20

    Azure存储:Blob与表

  21. 21

    Azure Blob 存储

  22. 22

    在 Azure Blob 存储中设置和检索 Blob 的元数据

  23. 23

    以编程方式从Azure Blob存储连接字符串中提取属性

  24. 24

    如何使用 Node.js 公开 Azure 文件存储 URL?

  25. 25

    使用Node.js在Azure Blob上设置content-md5?

  26. 26

    Blob存储上的CORS错误

  27. 27

    如何列出Azure存储容器和Blob

  28. 28

    如何从 azure blob 存储访问图像

  29. 29

    无法使用适用于Python的Azure SDK设置Azure Blob的属性

热门标签

归档