使用IBM Watson个性洞察服务时出现CORS错误

时间:2017-07-11 10:19:57

标签: reactjs cors ibm-watson watson personality-insights

我正在创建一个需要IBM Watson个性洞察服务的Web反应Web服务。 documented here

这是我的要求

var test = "some string";
var myHeaders = new Headers();
myHeaders.append("authorization",config.ibmCredential);
myHeaders.append("Content-type", "text/plain");
myHeaders.append("Accept", "application/json");
myHeaders.append("Access-Control-Allow-Origin","*");
var myRequest = { method: 'POST', headers: myHeaders, body: test}

我通过以下方式致电:

async postData() {
const data = await fetch(`${config.ibmURL}`,myRequest);

Firefox控制台给我的结果是:

  

阻止跨源请求:同源策略禁止在https://gateway.watsonplatform.net/personality-insights/api/v3/profile?version=2018-10-20读取远程资源。 (原因:在CORS预检频道的CORS标题'Access-Control-Allow-Headers'中遗漏了令牌'access-control-allow-origin'。)

我还尝试obtain a token to use instead发送凭据。但是,Firefox控制台只向我提供了这个,我不知道它是什么,也不知道如何使用它。

  

阻止跨源请求:同源策略禁止在https://gateway.watsonplatform.net/authorization/api/v1/token?url=https://gateway.watsonplatform.net/personality-insights/api.读取远程资源(原因:缺少CORS头“Access-Control-Allow-Origin”)。

*请注意,这两个请求都适用于Postman

1 个答案:

答案 0 :(得分:1)

sideshowbarker评论是正确的 - 您想要设置Access-Control-Allow-Origin标题;所有CORS请求都是如此。

此外,对于Watson CORS请求,您无法设置Authorization标头,因为这会将您的私人凭据泄露给最终用户。

相反,您必须使用Auth Tokens,这需要少量的服务器端代码。

您的服务器端代码使用您的私有凭据发出请求,然后获取可以向客户端公开的临时身份验证令牌。客户端在X-Watson-Authorization-Token标头或watson-token查询字符串参数中设置它。

请注意,令牌是url编码的,因此如果在查询字符串中使用它,则应注意不要对其进行双重编码。

一般情况下,我建议您尽可能使用SDK - 您可以合并webpackPersionality Insights示例,以实现从客户端代码使用Personality Insights的目标。