Habilitar la seguridad del chat web

Nota : El contenido de esta sección se aplica al asistente de IA. Si desea integrar el chat de IA en una página externa, consulte la página [Descripción general de la seguridad del chat web](.. /chat/web_chat_security_overview.html ).

Para activar la seguridad del chat web, debe realizar cambios en el código del servidor de la aplicación web y en el script de incrustación del chat web, así como en la configuración de integración del chat web.

Para obtener una implementación de referencia NodeJS completa que habilite la seguridad, consulte Habilitación de la seguridad para el chat web del constructor de asistentes de IA.

Antes de empezar

Antes de activar la seguridad, debe crear un par de claves RS256 pública/privada. Puede utilizar una herramienta como OpenSSL o PuTTYgen.

Por ejemplo, para crear el par de claves en un símbolo del sistema utilizando OpenSSL, se utilizaría el comando ' openssl genrsa -out key.pem 2048.

Guarde el par de claves generado en un lugar seguro.

Asegúrese de que estas claves son accesibles sólo por el código de su servidor. Nunca los pase al navegador de un cliente a través de su sitio web.

Generación de un JWT

Para utilizar la seguridad del chat web, debe configurar el chat web de su sitio web para que envíe un token web JSON (JWT) con cada mensaje al asistente de IA. El JWT se utiliza para verificar el origen de los mensajes enviados desde su sitio web y, opcionalmente, para transportar datos cifrados adicionales. Su sitio web deberá ser capaz de generar un nuevo JWT al inicio de cada sesión, y también cada vez que caduque un JWT existente.

No codifique un JWT en el código de su sitio web ni comparta JWT entre usuarios.

En su servidor, implemente una función que genere y devuelva un Token Web JSON (JWT) firmado con su clave privada. Utilizará este token para verificar el origen de los mensajes enviados desde su sitio web y, opcionalmente, para transportar datos cifrados adicionales.

La mayoría de lenguajes de programación ofrecen bibliotecas de JWT que puede utilizar para generar una señal. Para validar los JWT firmados, la integración de chat web utiliza la biblioteca jsonwebtoken con el algoritmo ' RS256.

La carga útil JWT debe especificar las siguientes declaraciones:

  • sub: Un ID de usuario único que identifica al cliente que está interactuando con el chat web. Puede ser un identificador único generado (para usuarios anónimos) o un identificador de usuario autenticado. Para obtener más información sobre cómo se utiliza el valor " sub ", consulte Autenticación de usuarios en el chat web.

    Para garantizar la seguridad, el JWT debe ser específico para cada usuario. Utilice la información de inicio de sesión autenticada del usuario o un ID único generado. No reutilices el mismo JWT, o el mismo valor ' sub ', para más de un usuario.

  • exp: El tiempo de expiración después del cual el JWT deja de ser válido. Muchas bibliotecas JWT establecen este valor automáticamente. Establece una declaración " exp " de corta duración (por ejemplo, " 1h).

    No cree un JWT sin un claim ' exp '. Aunque esta declaración no es formalmente obligatoria, omitirla representa una exposición de seguridad porque cualquiera con acceso al JWT podría copiarlo y utilizarlo más tarde para acceder a su asistente de IA. Establecer un tiempo de caducidad limita esta exposición.

El siguiente ejemplo JavaScript muestra cómo se puede generar un JWT utilizando la biblioteca ' jsonwebtoken:

// 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' });
}

Configuración del chat web para incluir JWTs

Ahora que ha implementado una función para generar un JWT firmado, debe actualizar su instancia de chat web para incluir el JWT firmado con cada mensaje que envíe. Después de activar la seguridad del chat web, se rechazan los mensajes que no estén firmados con la clave privada adecuada.

En el HTML de su sitio web, actualice el script de incrustación del chat web para especificar un nuevo JWT al inicio de cada sesión, y también cada vez que caduque el JWT existente. La forma más sencilla de hacerlo es suscribirse al evento ' identityTokenExpired ' y generar un nuevo JWT cuando se reciba ese evento. El evento ' identityTokenExpired ' se dispara en las dos situaciones siguientes:

  • Al inicio de una nueva sesión, si no se ha proporcionado ningún JWT mediante la opción de configuración " identityToken ".

  • Cuando expira el JWT especificado previamente.

En tu manejador de eventos ' onLoad ', utiliza el método de instancia ' on() ' para suscribirte al evento ' identityTokenExpired '.

En el callback, llama a la función en tu servidor que implementaste para generar un nuevo JWT. A continuación, utilice el parámetro ' identityToken del evento para especificar el nuevo JWT, como en este ejemplo:

instance.on({ type: 'identityTokenExpired',
              handler: async function(event) {
                const jwtFromServer = await fetch('http://example.com:3001/createJWT');
                event.identityToken = jwtFromServer;
}});

El nuevo JWT que especifique se enviará automáticamente con cada mensaje posterior de la instancia de chat web en su sitio web (hasta que caduque el token).

También puede especificar el JWT al inicio de la sesión utilizando la propiedad ' identityToken ' en el objeto de configuración del chat web. Sin embargo, todavía tendrá que crear un manejador de eventos para ' identityTokenExpired, a menos que esté seguro de que sus JWTs nunca expirarán durante una sesión.

Actualizar la configuración del chat web

Ahora que ha configurado el chat web para enviar JWT firmados, puede activar la seguridad del chat web en la configuración de integración del chat web.

Después de activar la seguridad del chat web, se rechazan los mensajes de cualquier origen que no sea su instancia de chat web (que haya configurado para enviar JWT firmados). Esto significa que al activar la seguridad del chat web se desactiva el enlace de vista previa compartible, que no envía JWT con los mensajes. Para obtener más información sobre el enlace de vista previa, consulte Copiar un enlace para compartir.

Para habilitar la seguridad, siga estos pasos:

  1. En la pestaña Seguridad de la configuración de integración del chat web, active la casilla Proteger el chat web.

  2. En el campo Tu clave pública, pega tu clave pública.

    AI assistant builder utiliza la clave pública para verificar que los mensajes entrantes proceden de su sitio web.

El siguiente diagrama muestra el flujo de mensajes entre el chat web y el asistente de IA cuando la seguridad del chat web está activada:

Flujo de mensajes de seguridad del chat web