Crittografia dei dati sensibili nella chat web

Utilizzando la chiave pubblica fornita da IBM, puoi aggiungere un altro livello di codifica per nascondere i dati sensibili che invii dalla chat web.

Per utilizzare questo metodo per crittografare i dati, è necessario prima abilitare la funzione di sicurezza della chat Web. Per ulteriori informazioni, consultare Abilitazione della sicurezza della chat Web.

Utilizzare questo metodo per inviare informazioni sensibili nei messaggi provenienti dal sito Web, come ad esempio informazioni sul livello di fedeltà di un cliente, un ID utente o token di sicurezza da utilizzare nei webhook richiamati dalle azioni. Le informazioni trasmesse al tuo assistente in questo modo vengono memorizzate in una variabile di contesto privata. Le variabili private non possono essere viste dai clienti e non vengono mai rimandate alla chat web.

Ad esempio, è possibile avviare un processo di business per un cliente VIP diverso dal processo che si avvia per un cliente standard. Non si desidera che i non VIP sappiano che sono categorizzati come tali, ma è necessario passare queste informazioni alla propria azione in modo che possano modificare il flusso della conversazione. Per fare ciò, puoi passare lo stato MVP del cliente come una variabile crittografata. Questa variabile di contesto privata è disponibile per l'utilizzo da parte dell'azione, ma non da parte di altri.

icona sviluppo Esercitazione: per un'esercitazione che mostra un esempio di utilizzo della sicurezza della chat Web per autenticare gli utenti e proteggere i dati sensibili, consultare Esercitazione: Autenticazione di un utente nel mezzo di una sessione.

Per codificare i dati sensibili:

  1. Nella scheda Sicurezza delle impostazioni di integrazione della chat Web, fare clic sul pulsante Genera chiave.

  2. Copia la chiave pubblica visualizzata nel campo IBM. Questo campo è disponibile solo se è abilitata la sicurezza della chat web.

  3. Nella funzione JavaScript utilizzata per creare il proprio JWT, includere nel payload una richiesta privata denominata user_payload. Utilizzare questa richiesta per contenere i dati sensibili, crittografati con la chiave pubblica IBM.

    Il seguente frammento di codice mostra una funzione che accetta un userID e un payload utente. Se viene fornito un payload dell'utente, il suo contenuto viene crittografato e firmato con la chiave pubblica IBM. In questo esempio, la chiave pubblica viene memorizzata in una variabile di ambiente.

    // Example code snippet to encrypt sensitive data in JWT payload.
    const jwt = require('jsonwebtoken');
    const RSA = require('node-rsa');
    
    const rsaKey = new RSA(process.env.PUBLIC_IBM_RSA_KEY);
    
    /**
    * Returns a signed JWT. Optionally, also adds an encrypted user payload
    * as stringified JSON in a private claim.
    */
    function mockLogin(userID, userPayload) {
      const payload = {
        sub: userID, // Required
        // The exp claim is automatically added by the jsonwebtoken library.
    };
    if (userPayload) {
        // If there is a user payload, encrypt it using the IBM public key
        // and base64 format.
        payload.user_payload = rsaKey.encrypt(userPayload, 'base64');
    }
    const token = jwt.sign(payload, process.env.YOUR_PRIVATE_RSA_KEY, { algorithm: 'RS256', expiresIn: '1h' });
    return token;
    }
    

    Il payload utente deve essere un dato JSON valido. La chat web usa le opzioni predefinite della libreria Node-RSA, che prevede lo schema di cifratura pkcs1_oaep e la cifratura base64.

  4. Quando l'integrazione della chat web riceve un messaggio firmato con questo JWT, il contenuto della richiesta user_payload viene decodificato e salvato come oggetto context.integrations.chat.private.user_payload. Poiché si tratta di una variabile privata, non verrà inclusa nei log.