是否可以在IBM Bluemix Conversation服务中启用CORS?
这是为了允许在客户端javascript中调用api并防止跨源错误。
答案 0 :(得分:2)
看看Conversation API doc它看起来确实可能。
应用程序还可以使用令牌与Watson服务建立经过身份验证的通信,而无需在每次调用中嵌入其服务凭据。您在Bluemix中编写身份验证代理以获取客户端应用程序的令牌,然后可以使用令牌直接调用该服务。您使用服务凭据获取该服务的令牌......
还有一个额外的步骤。您必须使用Authorization Service在服务器端生成一个watson身份验证令牌。
然后,您可以让客户端使用标头:X-Watson-Authorization-Token
或使用名为watson-token
的密钥作为查询参数,直接向会话服务发出请求。
我提供的答案Here也可能对您有帮助,因为它有一些Watson Tone Analyzer Service的工作示例代码,它使用用于生成Watson身份验证令牌的php服务器执行上面提到的操作。您将不得不用会话URL代替Tone Analyzer。
答案 1 :(得分:-1)
有一种更简单的方法可以为任何类型的服务接口启用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();
}
});
});