Javascript中Amazon Api授权中的SHA-1

SHA-1 in Amazon Api Authorization in Javascript

本文关键字:SHA-1 授权 Api Amazon Javascript      更新时间:2023-09-26

我一直在尝试获得Amazon s3 rest api的授权。这太复杂了。

因为我想让一个简单的GET请求从我的网站管理页面,我只是想通过Javascript做到这一点。下面是为授权头构造签名的说明:

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哈希。我最后的Signature函数是这样的:

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

这里出了什么问题?

我实际上从一个SO问题中找到了答案,参考了谷歌的旧(2.0)CrytpoJs库。你需要:

  • 2.0.0-crypto-sha1.js
  • 2.0.0-hmac-min.js

然后你创建你的签名如下:

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

我找不到在新版本中获得字符串而不是比特的方法。