我正在创建一个需要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
答案 0 :(得分:1)
sideshowbarker评论是正确的 - 您不想要设置Access-Control-Allow-Origin
标题;所有CORS请求都是如此。
此外,对于Watson CORS请求,您无法设置Authorization
标头,因为这会将您的私人凭据泄露给最终用户。
相反,您必须使用Auth Tokens,这需要少量的服务器端代码。
您的服务器端代码使用您的私有凭据发出请求,然后获取可以向客户端公开的临时身份验证令牌。客户端在X-Watson-Authorization-Token
标头或watson-token
查询字符串参数中设置它。
请注意,令牌是url编码的,因此如果在查询字符串中使用它,则应注意不要对其进行双重编码。
一般情况下,我建议您尽可能使用SDK - 您可以合并webpack和Persionality Insights示例,以实现从客户端代码使用Personality Insights的目标。