0

我一直在尝试获得亚马逊 s3 rest api的授权。真是太他妈复杂了。

因为我试图从我网站上的管理页面发出一个简单的GET 请求,所以我只是试图通过 Javascript 来做到这一点。以下是为 Authorization 标头构造签名的说明:

Signature = Base64( HMAC-SHA1( YourSecretAccessKeyID, UTF-8-Encoding-Of( StringToSign )     ))

为了让我们保持清醒,他们给我们举了几个例子,并给出了以下信息:

var AWSSecretAccessKey = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY,
    StringToSign = 'GET\n\n\nTue, 27 Mar 2007 19:36:42 +0000\n/johnsmith/photos/puppy.jpg;'

他们文档中的输出是bWq2s1WEIj+Ydj0vQ697zp+IXMU=. 基于以下我得到ZGVjNzNmNTE0MGU4OWQxYTg3NTg0M2MxZDM5NjIyZDI0MGQxZGY0ZQ==

function encode_utf8(s) {
  return unescape(encodeURIComponent(s));
}

我使用code.google.com 的CryptoJS.HmacSHA1 函数进行 SHA1 散列。我的最终签名函数如下所示:

var signature = btoa( CryptoJS.HmacSHA1( aws_secret, encode_utf8( StringToSign) ) );

这里出了什么问题???

4

1 回答 1

1

实际上,我参考 google 的旧 (2.0) CrytpoJs 库从SO question中找到了答案。你需要:

然后你这样创建你的签名:

Signature = btoa( Crypto.HMAC(Crypto.SHA1, encode_utf8(StringToSign), aws_secret, { asString: true }) )

我找不到在新版本中获取字符串而不是位的方法。

于 2013-06-14T05:26:23.967 回答