Подходят ли токены IBM Watson IAM для всех служб или для каждой службы, например, для преобразования речи в текст?

В документации IBM говорится, что следующий код серверной части Node позволяет вам:Use the API key to have the SDK manage the lifecycle of the token. The SDK requests an access token, ensures that the access token is valid, and refreshes it if necessary.

const SpeechToTextV1 = require('ibm-watson/speech-to-text/v1');
const { IamAuthenticator } = require('ibm-watson/auth');

const speechToText = new SpeechToTextV1({
  authenticator: new IamAuthenticator({
    apikey: '{apikey}',
  }),
  url: '{url}',
});

Как мне получить токен из speechToTextпередать моему клиентскому приложению Angular, работающему в браузере? Я пробовал вызвать методgetToken чтобы получить токен:

const SpeechToTextV1 = require('ibm-watson/speech-to-text/v1');
const { IamAuthenticator } = require('ibm-watson/auth');

const speechToText = new SpeechToTextV1({
    authenticator: new IamAuthenticator({
      apikey: 'my-api-key',
    }),
    url: 'my-url',
  });

speechToText.getToken(function (err, token) {
    if (!token) {
      console.log('error: ', err);
    } else {
      console.log(token);
      // do more stuff with the token
    }
});

Это не сработало. Сообщение об ошибкеspeechToText.getToken is not a function. Я должен попробоватьspeechToText.authenticator.getToken?

Я пытался получить токен из ibm-watson/sdk вместо ibm-watson/speech-to-text/v1?

const watson = require('ibm-watson/sdk');
const { IamAuthenticator } = require('ibm-watson/auth');

const authorization = new watson.AuthorizationV1({
  authenticator: new IamAuthenticator({ apikey: 'my-api-key' }),
  url: 'my-url'
});

authorization.getToken(function (err, token) {
    if (!token) {
      console.log('error: ', err);
    } else {
      console.log(token);
      // do stuff with token
    }
});

Это дает дымящийся новый жетон. Но токен не работает. Когда я бегуWatsonSpeech.SpeechToText.recognizeMicrophone Я получаю сообщение об ошибке HTTP Authentication failed; no valid credentials available.

Похоже, что каждой службе IBM Watson нужен собственный токен, созданный с помощью URL-адреса конкретной службы. Я поместил URL-адрес преобразования речи в текст вibm-watson/sdkтак что я должен получить правильный жетон. Я не понимаю, почему токен не работает.

2 ответа

Решение

Взгляните на раздел предоставления учетных данных README в Node SDK об управлении токеном самостоятельно, если это то, что вы хотите сделать:

Использовать BearerTokenAuthenticatorесли вы хотите самостоятельно управлять жизненным циклом. Дополнительные сведения см. В разделе Аутентификация в сервисах Watson. Если вы хотите переключить свой аутентификатор, вы должны напрямую переопределить свойство аутентификатора.

В теме "Аутентификация" есть ссылка, которая может помочь вам понять процесс доступа. См. Вызов API-интерфейсов службы IBM Cloud.

IBM Cloud использует то, что он называет Identity and Access Management (IAM), для управления доступом к ресурсам. IAM имеет несколько концепций, которые позволяют осуществлять детальный контроль безопасности. Вы можете предоставить пользователям или ролям права доступа с ограниченной областью действия. Таким образом, один пользователь может быть менеджером ресурса, другой - только читателем.

Теперь для доступа к такой службе, как службы Watson, контролируемые IAM, ваше имя пользователя / пароль или ключ API превращается в токен-носитель и токен обновления, токен-носитель действителен только в течение определенного времени, а затем требуется новый токен обновления. Это может быть причиной того, что вы видите разные токены.

Возможно, вы видели базовый SDK для Node.js, в котором есть справочная информация об аутентификации и некоторых функциях.

Короче говоря: после успешного создания IamAuthenticator вы сможете запросить токен и использовать его. Более того, вы можете передать IamAuthenticator многим службам, включая службы Watson, для инициализации сеанса. Код "знает", как получить информацию для аутентификации и использовать ее для аутентификации для другой службы.

Другие вопросы по тегам