ウェブチャットのセキュリティを有効にする
ウェブチャットセキュリティを有効にするには、ウェブアプリケーションサーバーコードとウェブチャット埋め込みスクリプト、およびウェブチャット統合設定を変更する必要があります。
このセクションの内容は、 AIアシスタントに適用されます。 AIチャットを外部ページに埋め込みたい場合は、 「Webチャットのセキュリティの概要」 ページを参照してください。
セキュリティ機能を有効にした、 NodeJS の完全なリファレンス実装については、 「AIアシスタントビルダー のWebチャットでセキュリティを有効にする 」を参照してください。
開始前に
セキュリティを有効にする前に、RS256公開鍵/秘密鍵ペアを作成する必要があります。 OpenSSL PuTTYgenなどのツールを使うことができる。
例えば、OpenSSL,てコマンドプロンプトで鍵ペアを作成するには、'openssl genrsa -out key.pem 2048 コマンドを使う。
生成されたキー・ペアを安全な場所に保存する。
これらのキーは、サーバーコードからのみアクセスできるようにしてください。 ウェブサイトを通じてクライアントのブラウザに渡すことは決してしないでください。
JWTの生成
Webチャットのセキュリティ機能を利用するには、Webサイト上のWebチャットを設定し、 AI アシスタントへの各メッセージにJSON Web Token(JWT)を添付するようにする必要があります。 JWTは、あなたのウェブサイトから送信されるメッセージの発信元を確認するために使用され、オプションで暗号化された追加データを運ぶために使用されます。 あなたのウェブサイトは、各セッションの開始時に新しいJWTを生成できる必要があり、また既存のJWTの有効期限が切れるたびに生成できる必要があります。
ウェブサイトのコードにJWTをハードコードしたり、ユーザー間でJWTを共有したりしないでください。
サーバー上で、秘密鍵で署名されたJSON Web Token(JWT)を生成して返す関数を実装する。 このトークンは、あなたのウェブサイトから送信されるメッセージの送信元を確認するために使用されます。
ほとんどのプログラミング言語は、トークンの生成に使用できる JWT ライブラリーが提供されています。 署名付きJWTを検証するために、Webチャット連携機能では jsonwebtoken ライブラリと[ RS256 algorithm]を使用しています。
JWTペイロードは以下のクレームを指定しなければならない:
sub: ウェブチャットと対話する顧客を識別する一意のユーザー ID。 これは、生成された一意の識別子(匿名ユーザーの場合)または認証されたユーザーIDのいずれかになります。 このsub値の使用方法の詳細については、 「Webチャットでのユーザー認証」 を参照してください。
セキュリティを確保するために、JWTは各ユーザーに固有のものでなければならない。 ユーザーの認証済みログイン情報、または一意に生成されたIDのいずれかを使用する。 同じJWTや同じ'sub値を複数のユーザーに再利用しないでください。
exp: JWTが無効になる有効期限。 多くのJWTライブラリは、この値を自動的に設定してくれる。 短命の'expクレーム(例えば'1h)を設定する。
expクレームなしでJWTを作成しないこと。 この主張は形式的には必須ではありませんが、これを省略するとセキュリティ上のリスクとなります。なぜなら、JWTにアクセスできる者であれば誰でもそれをコピーし、後で AIアシスタントにアクセスするために使用できてしまうからです。 有効期限を設定することで、この露出を制限することができる。
次の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を指定します。 これを行う最も簡単な方法は、その 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が送信されなくなります。 プレビューリンクの詳細については、共有するリンクをコピーするを参照してください。
セキュリティーを有効にするには、以下の手順を実行します。
ウェブチャット統合設定のセキュリティタブで、ウェブチャットのセキュリティを オンに設定します。
Your public keyフィールドに、公開鍵を貼り付けます。
AIアシスタントビルダーは、 公開鍵を使用して、受信メッセージがあなたのウェブサイトから送信されたものであることを確認します。
以下の図は、Webチャットのセキュリティ機能が有効になっている場合の、 Web チャットとAIアシスタント間のメッセージのやり取りを示しています:
