Watson 호출이 서비스에 도달하기 전에 실패하면 실패한 요청이 IAM 토큰 요청인지 확인합니다. IAM으로 인증된 호출은 먼저 IAM에, 다음으로 서비스에 연결할 수 있습니다.

해당 Watson SDK와 tunnel 의존성을 이미 사용하는 애플리케이션에서는 두 객체에 동일한 네트워크 설정을 제공합니다.

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

애플리케이션의 기존 apiKey, serviceVersion, serviceUrl 값은 그대로 유지합니다. API와 IAM 엔드포인트는 원래 목적지로 남고, 프록시 리스너는 에이전트 안에 둡니다. HTTP 프록시 목록은 두 공개 서비스 엔드포인트에 선택한 프록시를 통해 접근할 수 있을 때 후보 주소를 제공할 수 있습니다.

tunnel.httpsOverHttp는 HTTP 프록시를 통한 HTTPS 경로를 수립합니다. proxy: false는 SDK가 그 사용자 지정 에이전트 위에 또 다른 내장 프록시 구성을 적용하지 않도록 합니다.

이전에 이 설정을 assistant에만 전달했다면 인증기가 확인해야 할 빠진 지점입니다. 기본 인증과 이미 발급된 bearer 토큰은 토큰 획득 수명 주기가 다르므로, 이 추가 IAM 경로는 여기에서 사용하는 네트워크 기반 인증기에 해당합니다.

관련 글