我一直在尋找方法來限制對使用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'返回您將用於簽署規範請求的密鑰,而不是簽名本身。 –