当前位置: 首页 > 面试题库 >

在axios中设置授权标头

贺乐意
2023-03-14
问题内容

我一直在尝试使用axios向National Park Service
API发出GET请求,并尝试了几种方法将请求标头中的API密钥设置为无效。任何帮助将不胜感激。

我努力了:

axios.defaults.headers.common['Authorization'] = "MY-API-KEY";
axios.get('https://developer.nps.gov/api/v0/parks?parkCode=yell')
.then((resp) => {
    console.dir(resp);
});

let config = {'Authorization': 'MY-API-KEY'};
axios.get('https://developer.nps.gov/api/v0/parks?parkCode=yell', config)
.then((resp) => {
    console.dir(resp);
});

都返回401。当我在Postman中发送GET请求时工作,我在密钥字段中输入Authorization,在值字段中输入我的API密钥。

谢谢。


问题答案:

此问题是由浏览器中的CORS
OPTIONS请求引起的,与axios无关。https://developer.nps.gov要求Authorization所有HTTP请求(包括OPTIONS)中的标头。但是,所有自定义HTTP标头都将从OPTIONS中排除,请参阅html" target="_blank">https://www.w3.org/TR/cors/#cross-
origin-request-with-preflight-0

国家公园服务API不需要AuthorizationOPTIONS请求的标头,但确实如此。无论如何,有一种解决方法:在您自己的后端中进行转发,接收来自浏览器的HTTP请求,从后端中的https://developer.nps.gov检索数据,最后将其返回给浏览器。

实际上,从浏览器发送带有第三方授权密钥的HTTP请求绝对不是一个好主意-这种设计会将您的National Park Service
API密钥暴露给所有访问该页面的人,这当然是很危险的事情。

您的第一个解决方案(axios默认标头的配置API密钥)是可以的。我尝试使用自己的API密钥和您的URL,响应代码为200 OK。

对于第二种解决方案,该config对象应用作headersaxios语句中的字段。该代码将是:

axios.get('https://developer.nps.gov/api/v0/parks?parkCode=yell', {headers: config})


 类似资料:
  • 我正在用Expo CLI构建一个React原生应用程序,我正在尝试用Axios和redux Thunk获取一些用户数据到我的redux商店。

  • 我们正在尝试使用Apache Camel Restlet组件启动REST Web服务调用,并且成功了。 但是我们无法从我们在Apache Camel Exchange Header中设置的请求对象中检索授权标头属性值。 实际上我们是通过Camel的动态路由器进行这个REST调用的。有人能建议如何在Apache Camel Exchange中设置授权标头吗?

  • 问题内容: 我有一个react / redux应用程序,可从api服务器获取令牌。用户验证后,我想使所有axios请求都将该令牌作为Authorization标头,而不必手动将其附加到操作中的每个请求。我对React / Redux相当陌生,并且不确定采用最佳方法,也没有在Google上找到任何高质量的点击。 这是我的redux设置: 我的令牌存储在的redux存储中。 我对如何进行有点迷茫。我试

  • 我目前正在客户端应用程序上使用和。我用另一个请求回调()运行一个axios请求(),在第一个请求的响应中,我收到一个新的令牌。我尝试在回调的headers载体中设置这个新内标识。这不起作用:在回调()时,没有设置新的令牌,并且在头中没有设置更多的授权承载。 你知道问题出在哪里吗?

  • 我有一个用于REST API的HttpClient。然而,我在设置授权头时遇到了麻烦。我需要将头设置为我在执行OAuth请求时收到的令牌。我看到了一些.NET的代码, 但是,WinRT中不存在凭据类。有人知道如何设置授权头吗?