J'ai recherché des moyens de restreindre l'accès à une API pour l'utilisation d'une fonction AWS Lambda écrite en javascript.Signature d'une requête AWS API Gateway à l'aide du nœud
J'ai trouvé la documentation sur l'utilisation d'AWS Signature S4, mais je ne la comprends toujours pas.
Selon creating a signature, après l'application du pseudo-code, je devrais obtenir la signature à placer sur l'en-tête.
J'ai trouvé le code suivant qui aborde ce point:
// 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'));
vient ici ma première question, je ne sais pas ce qui devrait être la sortie de getSignatureKey()? C'est parce que sur la documentation c'est une très longue chaîne, alors que la sortie que j'ai eu était {mots: [x, x, x, x, x, x, x, x], sigBytes: 32}, où les x sont aléatoires Nombres.
En outre, après avoir obtenu la signature et rempli l'en-tête de la demande avec le champ "autorisation" et d'autres, comment puis-je filtrer les demandes non-conformes? Dois-je créer une stratégie pour l'API AWS afin qu'elle autorise uniquement les demandes signées? Ici, je suppose que je devrais suivre Signing Requests.
Merci!
Sur la page que vous avez cité:.. « L'exemple suivant montre la clé de signature dérivée qui résulte de cette séquence d'opérations HMAC de hachage ** Ceci montre la représentation hexadécimale de chaque octet dans la clé de signature binaire * * "Vos 32" mots (octets) sont équivalents à 64 caractères hexadécimaux. La représentation hexadécimale est conviviale, mais vous n'avez pas besoin de la clé de signature sous forme hexadécimale - c'est seulement à titre d'illustration. –
Merci! Cependant, si je n'ai pas besoin de la signature en hexadécimal, quel est le format de celui à introduire dans l'en-tête? –
'getSignatureKey' renvoie la clé que vous utiliserez pour signer la requête canonique, pas la signature elle-même. –