連絡先の Source ID を使ったログイン不要のチャット
自社サイトにログイン済みのユーザーが、自分のユーザー識別子(Source ID)を使って再ログインせずに会話を開始できます。プラットフォームはこの識別子を連絡先に対応付け、バックエンドで署名されていないリクエストによるなりすましを防ぎます。
Web Chat を自社サイトに埋め込む場合、ユーザーはすでにサイトにログインしていることがよくあります。この設定により、自社システムのユーザー識別子を使って、再度ログイン画面を経由せずに会話を開始できます。同時に、公開の会話 URL への匿名アクセスは引き続きブロックされます。
MaiAgent ではこの識別子を Source ID と呼び、管理画面と埋め込みスクリプトでもこの名称を使用します。プラットフォームが Source ID を受け取ると、連絡先に対応付けます(必要に応じて作成します)。そのユーザーの会話履歴は、この連絡先に紐付けられます。
一、この設定で解決できる問題
この設定が導入される前は、ログイン設定には次の二つの選択肢がありました。
ログインを有効にする:埋め込み側ですでに本人確認を済ませていても、ユーザーは再度ログインを求められます。
ログインを無効にする:公開の会話 URL を誰でも匿名で利用できます。
この設定を有効にすると、両方の要件を満たせます。Source ID と有効な署名を持つユーザーは直接会話を開始でき、それらを持たないアクセスはすべてログインページにリダイレクトされます。
二、設定を有効にする
設定場所:左側メニューの「 カスタマーサポート会話 > 会話プラットフォーム 」から、Web サイトタイプの会話プラットフォームを選択し、「 ログイン設定 」タブを開きます。
1. 先にログイン元を選択する
このスイッチはログイン設定に依存しているため、先に「 ログイン元 」でいずれかのログイン元(MaiAgent/AD/Keycloak/LINE)を選択する必要があります。未選択の場合、スイッチは操作できず、画面に「 先にログイン元を選択してください 」と表示されます。

2. スイッチを有効にする
「 埋め込み側の Source ID によるログイン不要の会話を許可する 」を有効にします。有効にすると、検証方法、署名シークレット、連携サンプルが表示されます。

3. 検証方法を選択する
署名検証を必須にする(推奨)
埋め込み側は、バックエンドで計算した署名を添付する必要があります。検証に成功した場合のみアクセスを許可します。シークレットを持つサーバーだけが、ユーザーに代わって会話を開始できます。
本番環境
Source ID のみ
署名を検証せず、Source ID があればアクセスを許可します。
テスト環境または閉じた社内ネットワーク
「Source ID のみ」を選択すると、Source ID 自体がアクセス許可証になります。Source ID がメールアドレス、学籍番号、社員番号などの推測可能な値の場合、他人がそのユーザーになりすまして会話したり、履歴を閲覧したりできます。本人確認が必要な場面では、署名モードを使用するか、AD/Keycloak/MaiAgent ログインに切り替えてください。

4. 署名シークレットを取得する
署名モードを選択して設定を保存すると、プラットフォームが署名シークレットを生成します。シークレット欄では、次の操作ができます。
「 表示 」をクリックしてシークレット全体を確認します(デフォルトではマスクされています)
「 コピー 」をクリックしてエンジニアに共有します
「 再生成 」をクリックして新しいシークレットを発行します
シークレットはサーバーの環境変数に保存し、フロントエンドのコードには絶対に記載しないでください。再生成すると古いシークレットは即座に無効になります。バックエンドも同時に更新しないと、すべての署名検証が失敗します。
5. 署名の有効期間を設定する
1、5、15 分から選択できます。デフォルトは 5 分です。有効期間を過ぎた署名や、すでに使用された署名は拒否されます。

三、エンジニアによる連携方法
管理画面の「 連携サンプル 」セクションには、この会話プラットフォームの識別子が反映されるため、そのままコピーして使用できます。パラメーターの詳細、検証ルール、トラブルシューティングについては、エンジニアに Web Chat 埋め込みと SDK · 署名検証 を参照してもらってください。
1. バックエンドで署名を計算する
署名は HMAC-SHA256(シークレット, "{会話プラットフォーム識別子}.{Source ID}.{タイムスタンプ}") を計算し、hex 文字列で渡します。タイムスタンプは Unix 秒(UTC)で、バックエンドで生成します。
2. フロントエンドで埋め込みスクリプトに値を渡す
3. 連携時の注意事項
アクセスのたびに新しい署名を生成してください:同じ署名を正常に使用できるのは一度だけです。埋め込み側で署名をキャッシュしないでください。
署名はバックエンドで計算してください:シークレットがフロントエンドのコードに含まれると、公開されたのと同じ状態になります。
時計を正確に合わせてください:システムが許容する時計のずれは 60 秒です。この範囲を超えるタイムスタンプは拒否されます。
正しい会話プラットフォーム識別子を使用してください:署名には会話プラットフォーム識別子が含まれます。別の会話プラットフォームの識別子で計算した署名は検証に失敗します。
四、動作の比較
Source ID + 有効な署名あり
ログイン画面を表示せず、直接会話を開始します
Source ID あり、署名が不正または期限切れ
拒否します
同じ署名を再利用
初回は成功し、2 回目は拒否します
Source ID なし(公開 URL を直接開く場合を含みます)
ログインページにリダイレクトします
検証方法が「Source ID のみ」+ Source ID あり
署名を検証せず、直接会話を開始します
このスイッチが無効
元のログイン設定の動作を維持します
五、署名検証失敗ログ
連携がうまくいかない場合は、設定セクションの「 署名検証失敗ログを表示 」をクリックすると、最近の失敗イベントを確認できます。エンジニアが自身で原因を調査できます。ログにはシークレットや署名全体は含まれません。

署名の期限切れ
サーバーの時計のずれ、または埋め込み側による署名のキャッシュです
タイムスタンプが未来の許容範囲を超えています
サーバーの時計が 60 秒を超えて進んでいます
署名が一致しません(シークレットが異なる可能性があります)
バックエンドと管理画面でシークレットが異なるか、署名文字列の組み立てが誤っています
タイムスタンプまたは署名がありません
埋め込み側が ts または sig を渡していません
署名は使用済みです
同じ署名が 2 回目に送信されました
リプレイ防止キャッシュを利用できません
プラットフォーム側の一時的な問題です。システムはアクセスを許可せず拒否します
Source ID が複数の連絡先に対応しています
この会話プラットフォームに、同じ Source ID を持つ連絡先データが重複しています
六、よくある質問
最終更新
役に立ちましたか?