如何在Bluemix对话中启用CORS

如何在Bluemix对话中启用CORS,cors,ibm-cloud,ibm-watson,watson-conversation,Cors,Ibm Cloud,Ibm Watson,Watson Conversation,是否可以在IBM Bluemix对话服务中启用CORS 这是为了允许在客户端javascript中调用api,并防止跨源错误。看看这个问题,它看起来确实是可能的 应用程序还可以使用令牌与Watson服务建立经过身份验证的通信,而无需在每次调用中嵌入其服务凭据。您可以在Bluemix中编写一个身份验证代理,以获取客户端应用程序的令牌,然后客户端应用程序可以使用该令牌直接调用服务。您使用服务凭据获取该服务的令牌 还有一个额外的步骤。您必须使用在服务器端生成watson身份验证令牌 然后,您可以让客户

是否可以在IBM Bluemix对话服务中启用CORS

这是为了允许在客户端javascript中调用api,并防止跨源错误。

看看这个问题,它看起来确实是可能的

应用程序还可以使用令牌与Watson服务建立经过身份验证的通信,而无需在每次调用中嵌入其服务凭据。您可以在Bluemix中编写一个身份验证代理,以获取客户端应用程序的令牌,然后客户端应用程序可以使用该令牌直接调用服务。您使用服务凭据获取该服务的令牌

还有一个额外的步骤。您必须使用在服务器端生成watson身份验证令牌

然后,您可以让客户端将该令牌与头一起使用:
X-Watson-Authorization-token
,或者作为名为
Watson-token
的密钥的查询参数,直接向对话服务发出请求


我提供的答案也可能对您有所帮助,因为它有一些Watson Tone Analyzer服务的工作示例代码,该服务使用用于生成Watson auth令牌的php服务器执行我上面提到的操作。您必须将对话URL替换为音调分析器URL。

有一种更简单的方法可以为任何类型的服务接口启用CORS。只需在响应头中添加您希望允许CORS的域。 您可能希望允许来自所有来源的请求,因此您还可以动态生成此类标头:

app.post('/api/conversation', function(request, response) {
    var text = request.body.text;

    //this is the point you prepare for CORS
    var origin = request.headers.origin;
    response.header("Access-Control-Allow-Origin", origin);
    //and you have just solved the CORS issue

    conversation.message({
        workspace_id: 'your-conversation-workspace-id-here',
        input: {'text': text},
        context: {}
    },
    function(err, resp) {
        if (err){
            response.sendStatus(500);
        }else{
            response.write(JSON.stringify(resp));
            response.end();
        }
    });
});

更新-我们实际上采用了不同的方法,使用php进行调用并返回响应,因此不需要启用CORS等。