Как получить токен аутентификации для службы IBM watson STT? - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь использовать службу Watson Speech To Text, которой требуется следующая команда для интерфейса websocket согласно документации

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

Я пытался это получить, чтобы получить {authentication-token} с помощью команды curl на терминале

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

Не удалось найти соответствующую документацию для этого, включая несколько сообщений, которые, по-видимому, выходят за рамки после недавних изменений , сделанных IBMwatson team.

Вопрос: Как получить authentication-token для правильного подключения к веб-сокету watson?

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Чтобы получить authentication-token, вам нужно выполнить следующую команду cURL .Это может быть включено в вашу программу до подключения (websocket handshake).

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

Эта строка должна использоваться в качестве заголовка запроса для рукопожатия вебсокета

0 голосов
/ 08 декабря 2018

Как упомянуто в документах API Speech to Text ,

Вы не можете использовать JavaScript для вызова интерфейса WebSocket из браузера.Параметр watson-token, который доступен с помощью метода / v1 / распознавать, не принимает токены IAM или ключи API .Для получения информации об обходе этого ограничения см. Примечания к выпуску .

Вот известное ограничение:

Служба «Речь в текст» имеет следующееизвестное ограничение.

Экземпляры службы, использующие аутентификацию IAM, в настоящее время не могут использовать JavaScript для вызова интерфейса WebSocket речи в текст.Это ограничение применяется к любому приложению (например, к демонстрационной версии службы), которое использует JavaScript для выполнения вызовов WebSocket из браузера.Вызовы WebSocket, выполняемые на других языках, могут использовать токены IAM или ключи API.Чтобы обойти это ограничение, вы можете сделать следующее:

Вызвать интерфейс WebSocket из-за пределов браузера.Вы можете вызвать интерфейс с любого языка, который поддерживает WebSockets.См. Информацию в интерфейсе WebSocket для получения инструкций по работе с другим языком.

SDK Watson предоставляют самый простой способ вызова интерфейса WebSocket с другого языка.SDK принимают ключ API и управляют жизненным циклом токенов. Информацию об использовании интерфейса WebSocket с SDK Node.js, Java, Python и Ruby см. В справочнике API .

Используйте синхронные или асинхронные интерфейсы HTTP для выполнения распознавания речи.

Если у вас есть старая служба Speech to Text с облачными учетными данными (имя пользователя и пароль), вы можете сделать Curlзапрос на watson-token как этот

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

Даже это задокументировано в документации API под параметром watson-token под Curl

Обеспечивает аутентификациютокен для сервиса.Используйте токен, основанный на учетных данных службы Cloud Foundry.Не передавайте токен доступа IAM или ключ API с этим параметром.

Обновление: Интерфейс WebSocket не может быть вызван из curl.Используйте клиентский язык сценариев для вызова интерфейса.Примеры кода для потоковой передачи аудио можно найти в каждом из SDK языков программирования, например, в Python SDK - https://github.com/watson-developer-cloud/python-sdk/blob/master/examples/microphone-speech-to-text.py

ОБНОВЛЕНИЕ 2019-02-09

Согласно документации к выпуску, теперь снова можно пройти аутентификацию в API websocket из браузера.См. https://cloud.ibm.com/docs/services/speech-to-text/release-notes.html#release-notes для выпуска от 28 января 2019 года. Однако получить токен аутентификации с помощью вашего API-ключа НЕ возможно из браузера (предотвращено CORG по соображениям безопасности).Итак, чтобы это работало: - получите токен API для Далласа (не заставил его работать для других регионов, похоже, что библиотека жестко задана для сервера Далласа) - используйте внутреннее приложение для получения токена аутентификации с использованием вашего ключа API- используйте токен аутентификации прямо из браузера, используя speech-javascript-sdk

...