如何获取IBM Watson STT服务的认证令牌?

时间:2018-12-07 13:33:27

标签: ibm-watson speech-to-text

我正在尝试使用Watson语音转文本服务,该服务需要根据documentation

为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"

上面的命令产生

  

错误:{“代码”:401,“错误”:“未经授权”,“描述”:“ ERCD250-LDAP-DN-AUTHERR”}

找不到合适的文档,其中包括IBM Watson团队撰写的recent changes之后似乎超出范围的几篇文章。

问题:如何获得authentication-token才能正确连接到Watson Web套接字?

2 个答案:

答案 0 :(得分:1)

要获取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);

callback内部,使用变量token来保存已解析的响应

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

此字符串应用作 websoket握手

请求标头

答案 1 :(得分:0)

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

  

您不能使用JavaScript从以下位置调用WebSocket接口:   浏览器。 watson-token参数可用于    / v1 / recognize方法不接受IAM令牌或API密钥。对于   有关解决此限制的信息,请参见Release notes

这是已知的限制,

  

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

     

使用IAM身份验证的服务实例当前无法使用   使用JavaScript调用语音转文本WebSocket接口。这个   限制适用于以下任何应用程序(例如服务演示)   使用JavaScript从浏览器进行WebSocket调用。 WebSocket   使用其他语言进行的调用可以使用IAM令牌或API   键。要变通解决此限制,您可以执行以下操作:

     

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

     

Watson SDK提供了最简单的调用WebSocket的方法   其他语言的界面。 SDK接受API密钥并进行管理   令牌的生命周期。有关使用WebSocket的信息   与Node.js,Java,Python和Ruby SDK的接口,请参见API reference

     

使用同步或异步HTTP接口执行语音   识别。

如果您有使用Cloud Foundry凭据(用户名和密码)的旧版语音转换为文本服务,则可以向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接口。使用客户端脚本语言调用该接口。您可以从Python SDK-https://github.com/watson-developer-cloud/python-sdk/blob/master/examples/microphone-speech-to-text.py

中找到本示例中的每种编程语言SDK中用于流音频的代码示例。

更新2019-02-09

根据发布文档,现在再次可以从浏览器向websocket API进行身份验证。请参阅:https://cloud.ibm.com/docs/services/speech-to-text/release-notes.html#release-notes,以了解2019年1月28日的发布。 但是,无法从浏览器中使用API​​密钥获取身份验证令牌(出于安全原因,CORG对此进行了阻止)。 因此,使这项工作: -获取达拉斯的api令牌(未使其在其他地区正常工作,好像lib被硬编码设置为达拉斯服务器) -使用后端应用程序通过您的api密钥获取身份验证令牌 -通过语音-javascript-sdk直接在浏览器中使用身份验证令牌