我一直在寻找方法来限制对使用JavaScript上编写的AWS Lambda函数进行API制作的访问。使用节点为AWS API网关请求签名
我发现了关于如何使用AWS Signature S4的文档,但我仍然不明白。
根据creating a signature,在应用伪代码后,我应该将签名放在标题上。
我发现下面的代码,解决了这一点:
// Example of signature generator
var crypto = require("crypto-js");
function getSignatureKey(Crypto, key, dateStamp, regionName, serviceName) {
var kDate = Crypto.HmacSHA256(dateStamp, "AWS4" + key);
var kRegion = Crypto.HmacSHA256(regionName, kDate);
var kService = Crypto.HmacSHA256(serviceName, kRegion);
var kSigning = Crypto.HmacSHA256("aws4_request", kService);
return kSigning;
}
console.log(getSignatureKey(crypto,'secretkey','date','us-east-2','iam'));
这才是我的第一个问题,我不知道应该是什么getSignatureKey的输出()?这是因为在文档中它是一个很长的字符串,而我得到的输出是{words:[x,x,x,x,x,x,x,x],sigBytes:32},其中x是随机的数字。
此外,在获得签名并填写请求的标题以及“授权”字段和其他人之后,如何过滤不合适的请求?我是否必须为AWS API创建策略,以便它只允许签名的请求?在这里,我想我应该按照Signing Requests。
谢谢!
从你所引用的页面:“下面的例子显示,从HMAC哈希操作顺序产生的派生签名密钥**这显示在二进制签名密钥每个字节的十六进制表示* *“你的32个字”(字节)等于64个十六进制字符。十六进制表示是眼球友好的,但你不需要十六进制形式的签名密钥 - 这只是为了说明。 –
谢谢!不过,如果我不需要十六进制签名,那么头文件中引入的格式是什么? –
'getSignatureKey'返回您将用于签署规范请求的密钥,而不是签名本身。 –