Cando unha chamada de Watson falla antes de chegar ao servizo, comprobe se a solicitude fallida é a solicitude do token de IAM. Unha chamada autenticada con IAM pode contactar primeiro con IAM e despois co servizo.

Nunha aplicación que xa usa o SDK de Watson correspondente e a dependencia tunnel, dea a mesma configuración de rede a ambos os obxectos:

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

Manteña o apiKey, o serviceVersion e o serviceUrl existentes da aplicación. Os puntos de conexión de API e IAM seguen a ser os seus destinos previstos; o receptor do proxy pertence ao axente. A lista de proxies HTTP pode fornecer enderezos candidatos cando se poida chegar aos dous puntos de conexión públicos do servizo a través dun proxy que escolla.

tunnel.httpsOverHttp establece a ruta HTTPS a través do proxy HTTP. proxy: false impide que o SDK aplique outra configuración de proxy integrada sobre ese axente personalizado.

Se antes só lle proporcionaba esta configuración a assistant, o autenticador é o lugar que falta por revisar. A autenticación básica e un token de portador xa emitido teñen ciclos de vida distintos para obter o token, polo que esta ruta adicional de IAM se aplica ao autenticador baseado en rede que se usa aquí.

Artigos relacionados