如何获得IBM watson STT服务的身份验证令牌



我正在尝试使用Watson语音转文本服务,根据文档,该服务需要以下针对websocket接口的命令

var token = {authentication-token};
var wsURI = 'wss://stream.watsonplatform.net/speech-to-text/api/v1/recognize'
+ '?watson-token=' + token
+ '&model=es-ES_BroadbandModel';

我已经尝试过在终端上使用curl命令来获得{authentication-token}

curl -X GET --user "apikey:{apikey}" "https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/text-to-speech/api"

上述命令产生

错误:{"code":401,"Error":"Unauthorized","description":"ERCD250-LDAP-DN-AUTHERR"}

找不到合适的文档,包括在IBM watson团队最近进行更改后似乎超出范围的几篇帖子。

问题:如何获得用于正确连接到watson web套接字的authentication-token

要获得authentication-token,您需要运行以下cURL命令。这可以在连接(websocket握手(之前包含在程序中。

curl -k -X POST --header "Content-Type: application/x-www-form-urlencoded" --header "Accept: application/json" --data-urlencode "grant_type=urn:ibm:params:oauth:grant-type:apikey" --data-urlencode "apikey={your apikey}" "https://iam.bluemix.net/identity/token"

点击此链接了解更多详细信息-https://console.bluemix.net/docs/services/watson/getting-started-iam.html

对于C++用户-您可以将其包括在以下中

#include <curl/curl.h>
main(){
//step 1- Initialise curl library
//step 2- Set header
curl_slist_append(headers,"Accept: application/json");
//step 3- Set Post request data
curl_slist_append(postdata,"grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey={my apikey}");
//step 4- setup cURL request
curl_easy_setopt(curl, CURLOPT_URL,"https://iam.bluemix.net/identity/token");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postdata);
/*Write callbacks to use the response in your authentication*/
res = curl_easy_perform(curl);
curl_slist_free_all(headers);
// always cleanup
curl_easy_cleanup(curl);

内部回调使用变量token来保存解析的响应

token = "Bearer<space><ParsedResponse>";

此字符串应用作weboket握手请求标头

语音到文本API文档中所述,

您不能使用JavaScript从浏览器可用于的watson令牌参数/v1/识别方法不接受IAM令牌或API密钥。对于有关绕过此限制的信息,请参阅发行版注意事项。

这是已知的限制,

语音转文本服务具有以下已知限制。

使用IAM身份验证的服务实例当前无法使用JavaScript来调用Speech-to-TextWebSocket接口。这限制适用于任何应用程序(如服务演示(使用JavaScript从浏览器进行WebSocket调用。WebSocket使用其他语言进行的调用可以使用IAM令牌或API键。要绕过此限制,您可以执行以下操作:

从浏览器外部调用WebSocket接口。你可以打电话支持WebSockets的任何语言的接口。提到WebSocket接口中的信息,用于在使用时提供指导另一种语言。

Watson SDK提供了调用WebSocket的最简单方法来自另一种语言的接口。SDK接受API密钥并管理代币的生命周期有关使用WebSocket的信息与Node.js、Java、Python和Ruby SDK的接口,请参阅API参考资料。

使用同步或异步HTTP接口执行语音认出

如果您有一个带有云代工凭据(用户名和密码(的旧语音到文本服务,您可以像下面的一样对watson-token发出Curl请求

curl -u {USERNAME}:{PASSWORD}"https://stream.watsonplatform.net/authorization/api/v1/token?url=https://stream.watsonplatform.net/speech-to-text/api"

即使在API文档中,Curl 下的watson-token参数中也记录了这一点

为服务提供身份验证令牌。使用的令牌基于Cloud Foundry服务凭据。不要传递IAM访问令牌或带有此参数的API密钥。

更新:无法从curl调用WebSocket接口。使用客户端脚本语言来调用接口。您可以在每个编程语言SDK中找到用于流式传输音频的代码示例,例如Python SDK中的示例https://github.com/watson-developer-cloud/python-sdk/blob/master/examples/microphone-speech-to-text.py

更新2019-02-09

根据发布文档,现在可以再次从浏览器向websocket API进行身份验证。请参阅:https://cloud.ibm.com/docs/services/speech-to-text/release-notes.html#release-2019年1月28日发布的说明。但是,使用API密钥从浏览器获取身份验证令牌是不可能的(由于安全原因,CORG阻止(。因此,要使其发挥作用:-为dallas获取一个api令牌(没有让它在其他地区工作,看起来lib是硬编码的,设置在dallas服务器上(-使用后端应用程序使用api密钥获取身份验证令牌-使用语音javascript sdk 直接从浏览器使用身份验证令牌

最新更新