Estoy trabajando en una aplicación para la plataforma Jira Cloud utilizando forge framework. Creé un punto de enlace HTTP con AWS API Gateway. Este punto final activa una función lambda que realiza alguna operación en DynamoDB. Empleé la autorización de IAM para el punto final. Después de fallar las pruebas para usar la biblioteca aws4 con forge, utilicé la siguiente función que se tomó de la documentación de AWS para crear la clave de firma. Sin embargo, al enviar la solicitud usando javascript, siempre obtengo "{mensaje: Prohibido}".:
export function getAWSHeaders(){ const accessKey = "" const secretKey = "" const regionName = "us-east-1" const serviceName = "execute-api" var date = new Date().toISOString().split('.')[0] + 'Z'; date = date.split("-").join("").split(":").join("") var dateWithoutTime = date.split("T")[0] var myHeaders = {} myHeaders["X-Amz-Date"] = date; var crypto = require("crypto-js"); var kDate = crypto.HmacSHA256(dateWithoutTime, "AWS4" + secretKey); var kRegion = crypto.HmacSHA256(regionName, kDate); var kService = crypto.HmacSHA256(serviceName, kRegion); var kSigning = crypto.HmacSHA256("aws4_request", kService); myHeaders["Authorization"] = "AWS4-HMAC-SHA256 Credential=" + accessKey + "/" + dateWithoutTime + "/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=" + kSigning return myHeaders; }Así es como envío la solicitud:
resolver.define("test", async ({context}) => { var url = "" var myHeaders = getAWSHeaders() var requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; const result = await fetch(url, requestOptions)No puedo averiguar qué está mal con mi generación de clave de firma. Revisé varias publicaciones pero no pude encontrar una solicitud de muestra. Gracias por la ayuda por adelantado.
PD: Lo probé usando Postman, funciona con la autorización "AWS Signature" en Postman.