Web-Chat-Sicherheit aktivieren

Um die Web-Chat-Sicherheit zu aktivieren, müssen Sie Änderungen am Code Ihres Webanwendungsservers und am Web-Chat-Einbettungsscript sowie an den Einstellungen für die Web-Chat-Integration vornehmen.

Eine vollständige NodeJS-Referenzimplementierung, die die Sicherheit aktiviert, finden Sie unter Sicherheit für watsonx Assistant-Web-Chat aktivieren.

Vorbereitende Schritte

Bevor Sie die Sicherheit aktivieren, müssen Sie ein RS256-Schlüsselpaar mit öffentlichem/privatem Schlüssel erstellen. Sie können ein Tool wie OpenSSL oder PuTTYgenverwenden.

Wenn Sie beispielsweise das Schlüsselpaar an einer Eingabeaufforderung mit OpenSSLerstellen möchten, verwenden Sie den Befehl openssl genrsa -out key.pem 2048.

Speichern Sie das generierte Schlüsselpaar an einer sicheren Position.

Stellen Sie sicher, dass nur der Server-Code auf diese Schlüssel zugreifen kann. Übergeben Sie sie niemals über Ihre Website an einen Client-Browser.

JWT generieren

Zur Verwendung der Web-Chat-Sicherheit müssen Sie den Web-Chat auf Ihrer Website so konfigurieren, dass er ein JSON Web Token (JWT) mit jeder Nachricht an den Assistenten sendet. Das JWT wird verwendet, um den Ursprung von Nachrichten zu überprüfen, die von Ihrer Website gesendet werden, und optional, um zusätzliche verschlüsselte Daten zu übertragen. Ihre Website muss in der Lage sein, zu Beginn jeder Sitzung ein neues JWT zu generieren und auch dann, wenn ein vorhandenes JWT abläuft.

Codieren Sie ein JWT nicht fest in Ihrem Website-Code oder teilen Sie JWTs zwischen Benutzern.

Implementieren Sie auf Ihrem Server eine Funktion, die ein JSON Web Token (JWT) generiert und zurückgibt, das mit Ihrem privaten Schlüssel signiert ist. Sie verwenden dieses Token, um den Ursprung von Nachrichten zu überprüfen, die von Ihrer Website gesendet wurden, und um optional zusätzliche verschlüsselte Daten zu übertragen.

Die meisten Programmiersprachen stellen JWT-Bibliotheken bereit, die Sie zum Generieren eines Tokens verwenden können. Zur Validierung signierter JWTs verwendet die Web-Chat-Integration die Bibliothek jsonwebtoken mit dem Algorithmus RS256.

Die JWT-Nutzdaten müssen die folgenden Deklarationen angeben:

  • sub: Eine eindeutige Benutzer-ID, die den Kunden identifiziert, der mit dem Web-Chat interagiert. Dies kann entweder eine generierte eindeutige ID (für anonyme Benutzer) oder eine authentifizierte Benutzer-ID sein. Weitere Informationen zur Verwendung des Werts sub finden Sie unter Benutzer im Web-Chat authentifizieren.

    Um die Sicherheit sicherzustellen, sollte das JWT für jeden Benutzer spezifisch sein. Verwenden Sie die authentifizierten Anmeldeinformationen des Benutzers oder eine eindeutige generierte ID. Verwenden Sie nicht dasselbe JWT oder denselben sub-Wert für mehrere Benutzer.

  • exp: Die Verfallszeit, nach der das JWT nicht mehr gültig ist. Viele JWT-Bibliotheken legen diesen Wert automatisch fest. Legen Sie einen kurzlebigen exp-Anspruch fest (z. B. 1h).

    Erstellen Sie kein JWT ohne eine exp-Deklaration. Obwohl dieser Anspruch formal nicht erforderlich ist, stellt das Auslassen ein Sicherheitsrisiko dar, da jeder Benutzer mit Zugriff auf das JWT ihn kopieren und später für den Zugriff auf Ihren Assistenten verwenden kann. Durch das Festlegen einer Ablaufzeit wird diese Gefährdung begrenzt.

Das folgende JavaScript-Beispiel zeigt, wie Sie ein JWT mithilfe der jsonwebtoken-Bibliothek generieren können:

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

Web-Chat zum Einschließen von JWTs konfigurieren

Nachdem Sie nun eine Funktion zum Generieren eines signierten JWT implementiert haben, müssen Sie Ihre Web-Chat-Instanz aktualisieren, um das signierte JWT mit jeder gesendeten Nachricht einzuschließen. Nachdem Sie die Web-Chat-Sicherheit aktiviert haben, werden alle Nachrichten zurückgewiesen, die nicht mit dem richtigen privaten Schlüssel signiert sind.

Aktualisieren Sie in der HTML Ihrer Website das Script für die Web-Chat-Einbettung, um ein neues JWT zu Beginn jeder Sitzung und auch dann anzugeben, wenn das vorhandene JWT abläuft. Die einfachste Methode besteht darin, das identityTokenExpired-Ereignis zu subskribieren und ein neues JWT zu generieren, wenn dieses Ereignis empfangen wird. Das Ereignis identityTokenExpired wird in beiden folgenden Situationen ausgelöst:

  • Zu Beginn einer neuen Sitzung, wenn kein JWT mit der Konfigurationsoption identityToken bereitgestellt wurde.

  • Wenn das zuvor angegebene JWT abläuft.

Verwenden Sie in Ihrem onLoad-Ereignishandler die Instanzmethode on(), um das Ereignis identityTokenExpired zu subskribieren.

Rufen Sie im Callback die Funktion auf Ihrem Server auf, die Sie implementiert haben, um ein neues JWT zu generieren. Verwenden Sie anschließend den identityToken-Parameter des Ereignisses, um das neue JWT anzugeben, wie im folgenden Beispiel gezeigt:

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

Das neue von Ihnen angegebene JWT wird automatisch mit jeder nachfolgenden Nachricht von der Web-Chat-Instanz auf Ihrer Website gesendet (bis das Token abläuft).

Sie können das JWT auch am Anfang der Sitzung angeben, wenn Sie die Eigenschaft identityToken im Web-Chat-Konfigurationsobjekt verwenden. Sie müssen jedoch trotzdem einen Ereignishandler für identityTokenExpired erstellen, es sei denn, Sie sind sicher, dass Ihre JWTs während einer Sitzung nie ablaufen.

Web-Chat-Einstellungen aktualisieren

Nachdem Sie den Web-Chat für das Senden signierter JWTs konfiguriert haben, können Sie die Web-Chat-Sicherheit in den Einstellungen für die Web-Chat-Integration aktivieren.

Nachdem Sie die Web-Chat-Sicherheit aktiviert haben, werden Nachrichten mit Ausnahme Ihrer Web-Chat-Instanz (die Sie für das Senden signierter JWTs konfiguriert haben) abgelehnt. Dies bedeutet, dass die Aktivierung der Web-Chat-Sicherheit den gemeinsam nutzbaren Vorschaulink inaktiviert, der keine JWTs mit Nachrichten sendet. Weitere Informationen zum Vorschaulink finden Sie unter Link zur gemeinsamen Nutzung kopieren.

Führen Sie die folgenden Schritte aus, um die Sicherheit zu aktivieren:

  1. Setzen Sie auf der Registerkarte Security der Einstellungen für die Web-Chat-Integration den Schalter Secure your web chat auf On.

  2. Fügen Sie im Feld Ihr öffentlicher Schlüssel Ihren öffentlichen Schlüssel ein.

    watsonx Assistant verwendet den öffentlichen Schlüssel, um zu überprüfen, ob eingehende Nachrichten von Ihrer Website stammen.

Das folgende Diagramm zeigt den Nachrichtenfluss zwischen dem Web-Chat und dem Assistenten, wenn die Web-Chat-Sicherheit aktiviert ist:

Nachrichtenfluss für Web-Chat-Sicherheit