웹 대화 보안 사용
웹 대화 보안을 사용하려면 웹 애플리케이션 서버 코드 및 웹 대화 임베드 스크립트와 웹 대화 통합 설정을 변경해야 합니다.
보안을 사용하는 전체 NodeJS 참조 구현은 watsonx Assistant 웹 대화에 대한 보안 사용을 참조하십시오.
시작하기 전에
보안을 사용하기 전에 RS256 공개/개인 키 쌍을 작성해야 합니다. OpenSSL 또는 PuTTYgen과 같은 도구를 사용할 수 있습니다.
예를 들어, OpenSSL을 사용하여 명령 프롬프트에서 키 쌍을 작성하려면 openssl genrsa -out key.pem 2048 명령을 사용합니다.
생성된 키 쌍을 안전한 위치에 저장하십시오.
서버 코드로만 이 키에 액세스할 수 있는지 확인하십시오. 웹 사이트를 통해 클라이언트 브라우저에 전달하지 마십시오.
JWT 생성
웹 대화 보안을 사용하려면 어시스턴트에 각 메시지와 함께 JWT (JSON Web Token) 를 전송하도록 웹 사이트에서 웹 대화를 구성해야 합니다. JWT는 웹 사이트에서 전송된 메시지의 원본을 확인하고 선택적으로 암호화된 추가 데이터를 전달하는 데 사용됩니다. 웹 사이트는 각 세션 시작 시 및 기존 JWT가 만료될 때마다 새 JWT를 생성할 수 있어야 합니다.
웹 사이트 코드에서 JWT를 하드코딩하거나 사용자 간에 JWT를 공유하지 마십시오.
서버에서 개인 키로 서명된 JWT (JSON Web Token) 를 생성하고 리턴하는 함수를 구현하십시오. 이 토큰을 사용하여 웹 사이트에서 전송된 메시지의 원본을 확인하고 선택적으로 암호화된 추가 데이터를 전달합니다.
대부분의 프로그래밍 언어는 토큰을 생성하는 데 사용할 수 있는 JWT 라이브러리를 제공합니다. 서명된 JWT의 유효성을 검증하기 위해 웹 대화 통합은 RS256 알고리즘과 함께 jsonwebtoken 라이브러리를 사용합니다.
JWT 페이로드는 다음 청구를 지정해야 합니다.
-
sub: 웹 대화와 상호작용하는 고객을 식별하는 고유 사용자 ID입니다. 이는 생성된 고유 ID (익명 사용자의 경우) 또는 인증된 사용자 ID일 수 있습니다.sub값이 사용되는 방법에 대한 자세한 정보는 웹 대화에서 사용자 인증 을 참조하십시오.보안을 보장하기 위해 JWT는 각 사용자에게 고유해야 합니다. 사용자의 인증된 로그인 정보 또는 고유하게 생성된 ID를 사용하십시오. 둘 이상의 사용자에 대해 동일한 JWT 또는 동일한
sub값을 재사용하지 마십시오. -
exp: JWT가 더 이상 유효하지 않게 되는 만기 시간입니다. 많은 JWT 라이브러리가 이 값을 자동으로 설정합니다. 수명이 짧은exp청구를 설정하십시오 (예:1h).exp청구 없이 JWT를 작성하지 마십시오. 이 청구가 공식적으로 필요하지는 않지만 JWT에 대한 액세스 권한이 있는 모든 사용자가 이를 복사하고 나중에 이를 사용하여 어시스턴트에 액세스할 수 있으므로 이를 생략하는 것은 보안 노출을 의미합니다. 만기 시간을 설정하면 이 노출이 제한됩니다.
다음 JavaScript 예제는 jsonwebtoken 라이브러리를 사용하여 JWT를 생성하는 방법을 보여줍니다.
// Sample NodeJS code on your server.
const jwt = require('jsonwebtoken');
// Returns a signed JWT signed with the RS256 algorithm.
function createJWT() {
const payload = {
sub: 'some-user-id', // Identifies user for billing purposes
};
// The "expiresIn" option adds an "exp" claim to the payload.
return jwt.sign(payload,
process.env.YOUR_PRIVATE_RSA_KEY,
{ algorithm: 'RS256', expiresIn: '1h' });
}
JWT를 포함하도록 웹 대화 구성
이제 서명된 JWT를 생성하는 기능을 구현했으므로 전송하는 각 메시지와 함께 서명된 JWT를 포함하도록 웹 대화 인스턴스를 업데이트해야 합니다. 웹 대화 보안을 사용으로 설정하면 적절한 개인 키로 서명되지 않은 모든 메시지가 거부됩니다.
웹 사이트 HTML에서 웹 대화 임베드 스크립트를 업데이트하여 각 세션 시작 시 및 기존 JWT가 만료될 때마다 새 JWT를 지정하십시오. 이를 수행하는 가장 간단한 방법은 identityTokenExpired 이벤트에 등록하고 해당 이벤트가 수신될 때 새 JWT를 생성하는 것입니다. identityTokenExpired 이벤트는 다음 두 상황 모두에서 실행됩니다.
-
새 세션 시작 시
identityToken구성 옵션을 사용하여 JWT가 제공되지 않은 경우. -
이전에 지정된 JWT가 만료되는 경우입니다.
onLoad 이벤트 핸들러에서 on() 인스턴스 메소드를 사용하여 identityTokenExpired 이벤트에
등록하십시오.
콜백에서 새 JWT를 생성하기 위해 구현한 서버의 함수를 호출하십시오. 그런 다음 이벤트의 identityToken 매개변수를 사용하여 다음 예제와 같이 새 JWT를 지정하십시오.
instance.on({ type: 'identityTokenExpired',
handler: async function(event) {
const jwtFromServer = await fetch('http://example.com:3001/createJWT');
event.identityToken = jwtFromServer;
}});
사용자가 지정하는 새 JWT가 웹 사이트의 웹 대화 인스턴스에서 각 후속 메시지와 함께 자동으로 전송됩니다 (토큰이 만료될 때까지).
웹 대화 구성 오브젝트에서 identityToken 특성을 사용하여 세션 시작 시 JWT를 지정할 수도 있습니다. 그러나 세션 중에 JWT가 만료되지 않는다고 확신하는 경우가 아니면 identityTokenExpired 에 대한 이벤트 핸들러를 작성해야 합니다.
웹 대화 설정 업데이트
서명된 JWT를 전송하도록 웹 대화를 구성했으므로 웹 대화 통합 설정에서 웹 대화 보안을 사용으로 설정할 수 있습니다.
웹 대화 보안을 사용으로 설정하면 웹 대화 인스턴스 (서명된 JWT를 전송하도록 구성한) 이외의 원본 메시지가 거부됩니다. 이는 웹 대화 보안을 사용으로 설정하면 공유 가능한 미리보기 링크가 사용 안함으로 설정되어 메시지와 함께 JWT를 전송하지 않음을 의미합니다. 미리보기 링크에 대한 자세한 정보는 공유할 링크 복사 를 참조하십시오.
보안을 사용으로 설정하려면 다음 단계를 완료하십시오.
-
웹 대화 통합 설정의 보안 탭에서 웹 대화 보안 스위치를 켜기로 설정하십시오.
-
공개 키 필드에 공개 키 를 붙여넣으십시오.
watsonx Assistant 는 공개 키를 사용하여 수신 메시지가 웹 사이트에서 생성되는지 확인합니다.
다음 다이어그램은 웹 대화 보안이 사용되는 경우 웹 대화와 어시스턴트 간의 메시지 플로우를 보여줍니다.
