Являются ли токены IBM Watson IAM хорошими для всех сервисов или указаны c для каждого сервиса, например, Speech-to-Text? - PullRequest
1 голос
/ 14 марта 2020

Документация IBM гласит, что следующий внутренний код узла позволяет вам 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-адреса c, определяемого службой. Я поместил URL-адрес для преобразования текста в ibm-watson/sdk, чтобы получить правильный токен. Я не понимаю, почему токен не работает.

Ответы [ 2 ]

1 голос
/ 16 марта 2020

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

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

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

0 голосов
/ 15 марта 2020

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

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

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

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

...