当前位置: 首页 > 知识库问答 >
问题:

Node.js:AWS签名的计算

丌官嘉良
2023-03-14

我在让AWS签名计算工作时遇到问题。目标是读取作为URL的一部分传递的4(键、日期戳、regionName、serviceName),并使用它们计算签名。我不是Node.js专家,非常感谢您的帮助和时间。

  1. URL示例:http://localhost:3000/getSignature?key=ASIAJSLN6INQGFK7XX7Q

我的Node.jshtml" target="_blank">代码。。。

var express = require('express');
var app = express();
var port = process.env.PORT || 3000;

//Crypto
var Crypto = require('crypto-js');

// routes
app.get('/getSignature', function(req, res) {
    var key = req.param('key');
    var dateStamp = req.param('dateStamp');
    var regionName = req.param('regionName');
    var serviceName = req.param('serviceName');

    var kDate = Crypto.HMAC(Crypto.SHA256, dateStamp, "AWS4" + key, {asBytes: true});
    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});
    res.send(key + ' ' + dateStamp + ' ' + regionName + ' ' + serviceName + ' ' + kSigning);

});

// start the server
app.listen(port);
console.log('Server started! At http://localhost:' + port);

我收到以下运行时错误:

TypeError:undefined在c:\Users\xxx\WebstormProjects\Unscriptd\app.js:34:24 at Layer.handle[作为handle\u请求](c:\Users\xxx\WebstormProjects\Unscriptd\node\u modules\express\lib\router\Layer.js:95:5)下一个(c:\Users\xxx\WebstormProjects\Unscriptd\node\u modules\express\lib\router\route.js:131:13)不是函数

已导入Crypto js库。

共有2个答案

张心水
2023-03-14

老兄。我复制了你的代码到我的github(复制)。https://github.com/ttwd80/so-nikolai-nodejs.git

下面是我做的cd/tmp rm-rf so nikolai nodejs git clone的步骤https://github.com/ttwd80/so-nikolai-nodejs.git cd so nikolai nodejs wc-l app.js npm install crypto js npm install express node app.js,它向我展示了:

服务器启动了!在http://localhost:3000

不太确定为什么会出现错误。

也许你可以试着重复这些步骤?

问题是,您的错误抱怨第34行,但您的代码没有这一行。您可能正在查看不同的文件并执行不同的文件。

让我知道进展如何。

谢谢。

羊舌诚
2023-03-14

第34行什么都没有。第31行是最后一行。

 类似资料:
  • 我在Rest服务上使用JWT的Spring启动和Spring安全。我使用了下面链接中的代码:https://www.javainuse.com/spring/boot-jwt-mysql它工作正常,但是当我们使用它的令牌进行身份验证时...我们面临以下错误: til.getSignatureException:JWT签名与本地计算的签名不匹配。JWT有效性不能被断言,也不应该被信任。在til.ja

  • 问题内容: 我正在尝试使用HMAC-SHA256算法创建签名,这是我的代码。我正在使用美国ASCII编码。 我从上面的代码中得到的结果是: 这与Wiki中显示的相同 除外 的。 如果我做对了所有事情,或者可能可以改善我的代码,我正在寻找想法/意见。 问题答案: 0x仅表示其后的字符表示一个十六进制字符串。 因此,0x只是为了阐明输出的格式,而无需担心它。

  • 我试图用这个例子来计算s3上传的AWS4签名-http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html 我正在使用示例中提供的值,但没有从ComputeSignature方法中获得期望值。我怀疑这是因为我正在为“signedheaders”参数传递一个空字符串(如果是,那么应该是什么?)。有人能解释一下我做错了什么

  • 我正试图上传一张使用AWS S3 SDK的图片。现在,这以前是有效的,但由于某种原因,它停止了工作,我开始得到这个错误: 现在,当我点击链接时,它会给我一个'NoSuchKey'错误: 我真的不明白这一点,因为我的键实际上只是一个字符串。我也试图上传一些东西,所以显然关键不会存在-我正在努力上传它! 另一个教程来自一个博客,我没有它的链接,但我上面的代码与文档中的这个教程相同。我所做的只是把它移到

  • 我试图生成签名的URL来上传和下载我的S3 bucket中的对象,但它失败了,“SignatureDoesNotMatch”如下所示。 我明白这是这里描述的问题的症状 而且,是的,我的桶存在。我怎么能用这个水落石出呢?