如何使用Jquery AJAX将API密钥作为请求标头发布到API网关

时间:2017-10-08 08:49:36

标签: jquery ajax api post api-key

我需要将json数据发布到受API密钥保护的AWS API网关。当我尝试在Postman中添加x-api-key标头并发出请求时,POST工作正常。但是,我想用Jquery代码做同样的事情。如何在JQuery中添加此x-api-key标头。这是我的代码,

var myJSON = JSON.stringify(obj);

    $.ajax({
       type: "POST",
       url:  "<aws-url>" ,
       data: myJSON,
       crossDomain : true,
       dataType: 'json',
       beforeSend: function(xhr){xhr.setRequestHeader("X-Api-Key","<value>");},
       headers :{
                'Content-Type':'application/x-www-form-urlencoded',
                //'Authorization':'<value>'
                },
       success: function(result) {
            console.log("ho gaya");
       }
    });

如您所见,我尝试在标题部分添加“授权”,“auth-key”,“AUTH-KEY”,“X-Api-Key”,“x-api-key”。我还在beforeSend部分添加了标题,但再次没有用。请帮忙。

1 个答案:

答案 0 :(得分:1)

我花了太长时间才弄明白这一点,也许这是一个解决另一个问题的方法,但这个问题与我的问题最相似 - 有一个由网关访问的lambda函数,受x-api-key保护,我可以通过.NET提交POST请求,但在jquery / ajax中失败。

1)使用相同的ajax脚本,删除标题结构中的beforeSend和Content-Type键名和值。

2)按照aws程序启用CORS。确保将此应用于POST / GET功能而不是资源:
https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

3)在步骤5中,Allow-Access-Control-Headers应具有X-Api-Key,只需将其更改为小写。

从这些步骤开始,启用CORS似乎很重要,只要您使请求头密钥名一致,x-api-key的小写就不那么重要了。最后,在您已经在API网关控制台中创建使用计划和API密钥之后,应该完成整个过程。

$.ajax({
    type: "POST",
    url: <url>,
    data: <myJSON>,
    crossDomain: true,
    dataType: 'json',
    headers: {"x-api-key": <keyvalue>},
    success: function(response) {
      $('#output').html('Success');
    },
    error: function(response) {
      $('#output').html('Failure');
    },
});