oauth-2.0 Amadeus API授权请求失败,因为“缺少强制性grant_type表单参数”

igetnqfo  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(346)

我尝试使用axios通过this documentation向Amadeus请求授权令牌。但是,我对axios库非常缺乏经验,因此无法正确构建请求,因为我得到了以下响应:

code: 38187
error: "invalid_request"
error_description: "Mandatory grant_type form parameter missing"
title: "Invalid parameters"

奇怪的是,我尝试用curl模拟同样的请求,它成功了,所以我真的很困惑我的错误在哪里。

curl -v "https://test.api.amadeus.com/v1/security/oauth2/token"
     -H "Content-Type: application/x-www-form-urlencoded"
     -d "grant_type=client_credentials&client_id=xxxxxx&client_secret=xxxxxx"

这是我的JavaScript代码,如果你能注意到不同之处,请告诉我!提前感谢

async getAmadeusKey() {
    const response = await axios({
        url: "https://test.api.amadeus.com/v1/security/oauth2/token",
        method: 'post',
        headers: {
            'Content-Type': 'x-www-form-urlencoded'
        },

        data: {
            grant_type: 'client_credentials',
            client_id: CLIENT_ID,  // of course both these constants are defined outside of this scope
            client_secret: CLIENT_SECRET,
        }
    });
    console.log(response.data);
}

编辑:我的头有一个错误,但是即使在应用了下面建议的修复后,响应错误地识别了我的请求中的错误。

6yjfywim

6yjfywim1#

默认情况下,axios将data参数序列化为JSON格式,但由于您希望发送x-www-form-urlencoded请求,因此必须将data参数序列化为JSON格式。
如果您只针对现代浏览器,则可以使用URLSearchParams,如下所示:

const data = new URLSearchParams({
  grant_type: 'client_credentials',
  client_id: CLIENT_ID,
  client_secret: CLIENT_SECRET
})

const response = await axios({
  ... // your code here
  data,
})

相关问题