Gdy wywołanie Watson kończy się niepowodzeniem, zanim dotrze do usługi, sprawdź, czy nieudane żądanie nie jest żądaniem tokenu IAM. Wywołanie uwierzytelniane przez IAM może najpierw skontaktować się z IAM, a dopiero potem z usługą.

W aplikacji, która już używa odpowiedniego Watson SDK i zależności tunnel, podaj te same ustawienia sieciowe obu obiektom:

const tunnel = require('tunnel');
const AssistantV2 = require('ibm-watson/assistant/v2');
const { IamAuthenticator } = require('ibm-watson/auth');

const httpsAgent = tunnel.httpsOverHttp({
  proxy: { host: 'proxy.example', port: 8080 },
});

const network = { httpsAgent, proxy: false };
const authenticator = new IamAuthenticator({
  apikey: apiKey,
  ...network,
});
const assistant = new AssistantV2({
  version: serviceVersion,
  serviceUrl,
  authenticator,
  ...network,
});

Zachowaj istniejące w aplikacji apiKey, serviceVersion i serviceUrl. Punkty końcowe API i IAM pozostają ich zamierzonymi celami; nasłuch proxy należy do agenta. listy proxy HTTP może dostarczyć adresy kandydujące, gdy oba publiczne punkty końcowe usługi są osiągalne przez wybrane proxy.

tunnel.httpsOverHttp ustanawia ścieżkę HTTPS przez proxy HTTP. proxy: false uniemożliwia SDK nałożenie innej wbudowanej konfiguracji proxy na tego niestandardowego agenta.

Jeśli wcześniej podawałeś te ustawienia tylko obiektowi assistant, uwierzytelniacz jest brakującym miejscem do sprawdzenia. Uwierzytelnianie podstawowe i już wydany token bearer mają różne cykle pozyskiwania tokenów, więc ta dodatkowa ścieżka IAM dotyczy używanego tutaj uwierzytelniacza sieciowego.

Powiązane artykuły