1

我正在创建一个需要 IBM watson 个性洞察服务的 Web 反应 Web 服务。记录在这里

这是我的要求

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”)。

我还尝试获取要使用的令牌,而不是发送凭据。但是,Firefox 控制台只为我提供了这个,我不知道它是什么,也不知道如何使用它。

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

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

4

1 回答 1

1

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

此外,对于 Watson CORS 请求,您不能设置Authorization标头,因为这会将您的私有凭证泄露给您的最终用户。

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

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

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

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

于 2017-07-13T16:39:03.007 回答