我正在尝试对需要 OAuth Bearer 令牌的 Uber API 端点进行客户端 JS 调用,例如/v1/me
,但我收到一个错误,即Access-Control-Allow-Origin
响应中不存在标头。
我已经成功获得了一个承载令牌(服务器端)以在 GET 请求的 Authorization 标头中使用。
在我的 Uber API 应用程序设置中,我将我的 Origin URI 设置为我的开发服务器 ( https://localhost:9000 )。
这是我如何调用/v1/me
端点:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.uber.com/v1/me');
xhr.setRequestHeader("Authorization", "Bearer MY_BEARER_TOKEN");
xhr.send();
在 Chrome 开发者控制台中,我收到以下错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource
为了确保我的 Bearer 令牌有效,我使用 curl成功测试了它:
curl -H 'Authorization: Bearer MY_BEARER_TOKEN' 'https://api.uber.com/v1/me'
附带说明一下,我能够成功调用不需要 OAuth Bearer 令牌的 API 端点,例如/products
并/estimates/price
使用 Authorization Token 标头,如下所示:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.uber.com/v1/products');
xhr.setRequestHeader("Authorization", "Token MY_SERVER_TOKEN");
xhr.send();
这让我相信问题不在于 Uber API 应用程序配置设置,例如不正确的 Origin URI。
最后一点,当我获得 OAuth 令牌时,我是从在我的开发服务器上运行的 Node Express 应用发出请求,地址为https://localhost:8080,这与我在https运行客户端 JS 应用的位置不同://localhost:9000。然而,从同一个端口发出请求并没有解决问题。
有任何想法吗?谢谢!