【问题标题】:Generating Amazon API signature in JavaScript, importing hash functions (jQuery)在 JavaScript 中生成 Amazon API 签名,导入哈希函数 (jQuery)
【发布时间】:2015-01-28 16:55:00
【问题描述】:

作为前言,我对 JavaScript 和 Web 开发非常陌生。对于我所犯的任何愚蠢的错误或误解,我深表歉意!

我正在为一个门户网站制作一个小部件。小部件的设置使得每个小部件都是一个独立的 JavaScript 函数,因此我无法在小部件之外访问网页的 HTML。

我目前的目标是向亚马逊发出 API 请求,这需要在每个请求时生成一个签名。我正在使用亚马逊提供的以下指南:

http://docs.aws.amazon.com/general/latest/gr/signature-v4-examples.html#signature-v4-examples-jscript

很遗憾,由于我无法访问网页的 HTML,我正在使用 jQuery 函数 $.getScript 来导入上述亚马逊指南提供的函数:

code.google.com/p/crypto-js/#HMAC

具体来说,这个:

crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js

我的函数目前看起来是这样的:

/**
 *Get signature key by hashing, scheme provided by Amazon
 */
getSignatureKey: function(key, dateStamp, regionName, serviceName) {
  $.getScript("widgets/textshop/hmac-sha256.js", function(){
    return signatureKeyHelper();
  });
  //Helper function for getSignatureKey since getScript is returned immediately; function not loaded in time
  function signatureKeyHelper(){
    console.log("A");  //Outputs!
    var kDate= Crypto.HMAC(Crypto.SHA256, dateStamp, "AWS4" + key, { asBytes: true})
    console.log("B");  //Error in previous line!
    var kRegion= Crypto.HMAC(Crypto.SHA256, regionName, kDate, { asBytes: true });
    var kService=Crypto.HMAC(Crypto.SHA256, serviceName, kRegion, { asBytes: true });
    var kSigning= Crypto.HMAC(Crypto.SHA256, "aws4_request", kService, { asBytes: true });

    return kSigning;
  }
},

控制台输出“A”,但给出错误“TypeError: Crypto.HMAC is not a function”。我非常不确定的部分是“加密”名称的使用——我完全不知道这个名称的来源,是否应该将其更改为其他名称,等等。

感谢您的宝贵时间!

【问题讨论】:

    标签: javascript jquery amazon-web-services


    【解决方案1】:

    Crypto 是您通常会在页面上加载的库。

    该错误表示该函数尚未定义;我猜 $.getScript 没有按您的预期工作。

    注意:您永远不应该公开您的 AWS 密钥。您不能在客户端加密。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 2022-11-06
      • 2012-11-19
      • 1970-01-01
      • 2021-01-20
      • 1970-01-01
      相关资源
      最近更新 更多