ロゴ
Amazon Connect blog > 記事一覧 > Amazon Connect チャットのセキュリティを強化する方法
2023年11月1日 7:39
Amazon Connect チャットのセキュリティを強化する方法
#チャット#セキュリティ

Amazon Connectチャットは指定したドメインでしか起動できません。ただし、通信の傍受などで通信改竄される余地があります。この対策として、JWTトークンを用いて、通信改竄を防ぐ方法が提供されています。この記事では具体的な手順について解説していきます。

Amazon Connect チャット

Amazon Connect チャットはリアルタイムコミュニケーションをするためのチャットサービスです。基本的な設定方法については以下の記事を参考にしてください。

https://www.alleeks.com/acblog/chat-setting

Amazon Connectチャットは指定したドメインでしか起動できませんが、通信の傍受などで通信改竄される余地があります。この対策として、JWTトークンを用いて、通信改竄を防ぐ方法が提供されています。この記事では具体的な手順について解説していきます。

チャットのセキュリティを有効にする

サイドバーの「チャネル」から「チャットウィジェット」をクリックし、設定画面に移動します。

https://images.prismic.io/alleeks/4a8c46f8-c56e-4986-9762-2ae01edf6392_bef9544f46f84364b261c0490b4312c5_chat_widget_sidebar.png?auto=compress,format

ウィジェットの設定画面を開き、右上のチャットを埋め込むサイトを指定するための項目で「編集」をクリックしてください。

https://images.prismic.io/alleeks/d75442cf-c3a5-4805-867e-1075a6084043_bef954_chat_widget_setting.png?auto=compress,format

「新しいチャットリクエストにセキュリティを追加」で「はい」を選択します。最後に、「保存」をクリックして完了です。

https://images.prismic.io/alleeks/b1e3a7f2-a04d-46ea-b9b9-35da560ca0b2_スクリーンショット+2023-09-28+16.59.19.png?auto=compress,format

JWTを渡すサーバーを立ち上げる

まず、サーバーを立ち上げます。ここではNode.jsでサーバーを動かします。/tokenというエンドポイントで、JWTトークンを渡します。server.jsというファイルに以下のコードを書いてください。

// server.js
const express = require('express');
const cors = require('cors');
const jwt = require('jsonwebtoken');

const app = express();

app.use(cors());

// ウィジェットID
const WIDGET_ID = 'xxxxxx';
// セキュリティキー
const CONNECT_SECRET = 'xxxxxx';
const JWT_EXP_DELTA_SECONDS = 600;
const JWT_ALGORITHM = 'HS256';

app.get('/token', (req, res) => {
    const payload = {
        sub: WIDGET_ID,
        iat: Math.floor(Date.now() / 1000),
        exp: Math.floor(Date.now() / 1000) + JWT_EXP_DELTA_SECONDS
    };
    const options = {
        algorithm: JWT_ALGORITHM,
        header: {
            typ: "JWT",
            alg: 'HS256'
        }
    };
    const encodedToken = jwt.sign(payload, CONNECT_SECRET, options);
    res.json({ data: encodedToken });
});

app.listen(5000, () => {
    console.log('Server running on port 5000');
});

ウィジェットIDは、以下の画像で赤で囲んでいるIDを入れてください。セキュリティキーは、オレンジで囲んでいる「キーをコピー」からコピーできます。

https://images.prismic.io/alleeks/7e8d86be-7294-4e6e-a6a7-93861d2312f5_スクリーンショット+2023-10-01+12.37.19.png?auto=compress,format

server.jsが存在するディレクトリで、ライブラリをインストールし、サーバーを立ち上げてください。

npm install express cors jsonwebtoken
node server.js

チャットウィジェットを埋め込み、JWTを受け取る

次に、チャットウィジェットの埋め込んだHTMLファイルを以下のように用意してください。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>チャット画面</title>
</head>
<body>
	<!-- scriptタグの中をペースト -->
  <script>
	  (function(w, d, x, id){
	    s=d.createElement('script');
	    s.src='https://xxxxxxxxx/amazon-connect-chat-interface-client.js';
	    s.async=1;
	    s.id=id;
	    d.getElementsByTagName('head')[0].appendChild(s);
	    w[x] =  w[x] || function() { (w[x].ac = w[x].ac || []).push(arguments) };
	  })(window, document, 'amazon_connect', 'xxxxxxxxxxx');
	  amazon_connect('styles', { openChat: { color: '#ffffff', backgroundColor: '#f471b0'}, closeChat: { color: '#ffffff', backgroundColor: '#de673f'} });
	  amazon_connect('snippetId', 'xxxxxxxxx');
	  amazon_connect('supportedMessagingContentTypes', [ 'text/plain', 'text/markdown' ]);
		
		// これを追加
		amazon_connect("authenticate", function (callback) {
      window.fetch("サーバーへのパス/token").then((res) => { 
        res.json().then((data) => {
          callback(data.data);
        });
      });
    });
  </script>
</body>
</html>

HTMLファイルをlocalhostで立ち上げ、実際にブラウザで開くと、チャットウィジェットが右下に表示されます。チャットを利用することができれば成功です。

https://images.prismic.io/alleeks/d77ebaa0-209a-444d-8a1f-022219c245b6_スクリーンショット+2023-10-01+12.56.02.png?auto=compress,format

まとめ

Amazon Connectのチャットを利用する際に、JWTトークンを利用して、セキュリティ安全性を高めることができます。サーバーの用意が必要ですが、通信の傍受や改ざんを防ぐのに役立ちます。

ロゴ
©2021 Alleeks CO., LTD.