Quando uma chamada do Watson falha antes de chegar ao serviço, verifique se a solicitação que falhou é a solicitação de token do IAM. Uma chamada autenticada pelo IAM pode contatar o IAM primeiro e o serviço depois.

Em um aplicativo que já usa o Watson SDK relevante e a dependência tunnel, forneça as mesmas configurações de rede aos dois objetos:

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,
});

Mantenha o apiKey, o serviceVersion e o serviceUrl existentes do aplicativo. O endpoint da API e do IAM continuam sendo os destinos pretendidos; o ouvinte do proxy pertence ao agente. lista de proxies HTTP pode fornecer endereços candidatos quando os dois endpoints públicos do serviço puderem ser alcançados por um proxy que você escolher.

tunnel.httpsOverHttp estabelece o caminho HTTPS pelo proxy HTTP. proxy: false impede o SDK de aplicar outra configuração de proxy embutida sobre esse agente personalizado.

Se você antes fornecia essas configurações apenas ao assistant, o autenticador é o lugar que falta verificar. A autenticação básica e um token bearer já emitido têm ciclos de obtenção de token diferentes, portanto esse caminho extra do IAM se aplica ao autenticador baseado em rede usado aqui.

Artigos relacionados