> For the complete documentation index, see [llms.txt](https://docs.maiagent.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.maiagent.ai/maiagent-user-guide/ja/build/choose-channel/web-chat/source-id-access.md).

# 連絡先の Source ID でログインせずに会話する

自社サイトにログイン済みのユーザーが、自分のユーザー番号（Source ID）を持ったまま、再ログインなしで直接会話できるようにします。プラットフォームはこの番号をもとに 1 人のコンタクトに対応付け、貴社のバックエンドで署名されていないリクエストでは誰にもなりすませません。

Web Chat を自社サイトに埋め込む場合、ユーザーはすでに自社サイトにログインしていることがよくあります。この設定を使うと、ユーザーは貴社システムのユーザー番号を持ったまま、ログイン画面を再度経由することなく直接会話を始められます。一方で、公開されている会話用 URL への匿名アクセスは引き続きブロックされます。

この番号は MaiAgent では **Source ID** と呼ばれ、管理画面でも埋め込みスクリプトでもこの名称が使われます。プラットフォームは Source ID を受け取ると、**コンタクト**に対応付け（または新規作成し）、そのユーザーの会話履歴をこのコンタクトに紐付けます。

## <mark style="color:blue;">一、この設定で解決できること</mark> <a href="#what-it-solves" id="what-it-solves"></a>

この設定が登場する前は、ログイン設定は二者択一でした。

* ログイン設定をオンにする：埋め込み側ですでに本人確認が済んでいるにもかかわらず、ユーザーは再度ログインを求められます。
* ログイン設定をオフにする：公開されている会話用 URL を誰でも匿名で利用できてしまいます。

この設定をオンにすると、両方を同時に成立させられます。Source ID と有効な署名を持ってアクセスしたユーザーは直接会話でき、それらを持たないアクセスは常にログインページへ誘導されます。

{% hint style="info" %}
この設定は初期状態でオフです。オフの間は、既存の動作は一切変わりません。
{% endhint %}

## <mark style="color:blue;">二、設定をオンにする</mark> <a href="#enable" id="enable"></a>

設定の場所：左側のメニューの「<mark style="color:blue;">カスタマーサポート > チャットプラットフォーム</mark>」から、Web サイトタイプのチャットプラットフォームを選択し、「<mark style="color:blue;">ログイン設定</mark>」タブを開きます。

### 1. 先にログインソースを選択する <a href="#prerequisite" id="prerequisite"></a>

このスイッチはログイン設定に依存しているため、先に「<mark style="color:blue;">ログインソース</mark>」でいずれかのソース（MaiAgent／AD／Keycloak／LINE）を選択する必要があります。未選択の間はスイッチをクリックできず、画面に「<mark style="color:blue;">先にログインソースを選択してください</mark>」と表示されます。

<figure><img src="https://2584873290-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTvHx8hgwYGDTLD3A7xoW%2Fuploads%2Fgit-blob-0bed4d025474ad42bf838b7e9e00e78f90693425%2Fsourceid-01-default.png?alt=media" alt=""><figcaption><p>ログイン設定タブ。このスイッチは初期状態でオフ</p></figcaption></figure>

### 2. スイッチをオンにする <a href="#toggle" id="toggle"></a>

「<mark style="color:blue;">埋め込み側が Source ID でログインなしの会話を行うことを許可する</mark>」をオンにします。オンにすると、検証方式、署名シークレット、連携サンプルが表示されます。

<figure><img src="https://2584873290-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTvHx8hgwYGDTLD3A7xoW%2Fuploads%2Fgit-blob-95e715c203b5b89846e419419586baad4076301b%2Fsourceid-02-enabled-signature.png?alt=media" alt=""><figcaption><p>オンにすると展開される設定セクション。検証方式の初期値は「署名検証を必須にする」</p></figcaption></figure>

### 3. 検証方式を選択する <a href="#verify-mode" id="verify-mode"></a>

| 検証方式                                            | 説明                                                                                               | 適した場面                  |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | ---------------------- |
| <mark style="color:blue;">署名検証を必須にする</mark>（推奨） | 埋め込み側は、貴社のバックエンドで計算した署名を付与する必要があり、署名検証に通った場合のみアクセスが許可されます。シークレットを保持するサーバーだけが、ユーザーに代わって会話を開始できます。 | 本番環境                   |
| <mark style="color:blue;">Source ID のみ</mark>   | 署名を検証せず、Source ID が付いていればアクセスを許可します。                                                             | テスト環境、または閉じた社内ネットワーク環境 |

{% hint style="danger" %}
「Source ID のみ」を選択すると、Source ID がそのまま通行証になります。Source ID がメールアドレス、学籍番号、社員番号など推測しやすい値の場合、第三者がその ID になりすまして会話し、履歴を閲覧できてしまいます。本人性の保証が必要な場面では、署名モードを使用するか、AD／Keycloak／MaiAgent のログインに切り替えてください。
{% endhint %}

<figure><img src="https://2584873290-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTvHx8hgwYGDTLD3A7xoW%2Fuploads%2Fgit-blob-8fa84f2e4965e66f8872be1997424f02b47e77c5%2Fsourceid-03-raw-mode-warning.png?alt=media" alt=""><figcaption><p>「Source ID のみ」を選択すると、赤色のリスク警告が表示される</p></figcaption></figure>

### 4. 署名シークレットを取得する <a href="#signing-secret" id="signing-secret"></a>

署名モードを選択して設定を保存すると、プラットフォームが署名シークレットを生成します。シークレット欄では次の操作ができます。

* 「<mark style="color:blue;">表示</mark>」をクリックして、完全なシークレットを確認する（初期状態はマスク表示）
* 「<mark style="color:blue;">コピー</mark>」をクリックして、エンジニアに渡す
* 「<mark style="color:blue;">再生成</mark>」をクリックして、新しいシークレットに更新する

{% hint style="warning" %}
シークレットは、サーバーの環境変数に保管し、フロントエンドのコードには絶対に書き込まないでください。再生成すると古いシークレットは直ちに無効になるため、バックエンドも同時に切り替える必要があります。切り替えないと、すべての署名が検証に失敗します。
{% endhint %}

### 5. 署名の有効期限を設定する <a href="#signature-ttl" id="signature-ttl"></a>

1 分、5 分、15 分から選択でき、初期値は 5 分です。期限切れの署名や、すでに使用された署名は拒否されます。

<figure><img src="https://2584873290-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTvHx8hgwYGDTLD3A7xoW%2Fuploads%2Fgit-blob-2e4eb936b04e8a0ffea6d1aa0dac6fa5b6ec0407%2Fsourceid-04-secret-ttl-snippets.png?alt=media" alt=""><figcaption><p>署名シークレット、署名の有効期限、連携サンプル、動作プレビュー</p></figcaption></figure>

{% hint style="info" %}
有効期限が制限するのは「この署名を使って会話を開始できる期間」であり、会話の存続期間ではありません。ユーザーが本人性を取得したあとは通常どおり会話でき、5 分後にログアウトされることはありません。
{% endhint %}

## <mark style="color:blue;">三、エンジニアによる連携方法</mark> <a href="#integration" id="integration"></a>

管理画面の「<mark style="color:blue;">連携サンプル</mark>」セクションには、このチャットプラットフォームの識別子が入力済みの状態で、バックエンドでの署名計算（PHP／Node／Python）とフロントエンドでの受け渡しのサンプルが用意されています。そのままコピーしてエンジニアに渡せます。署名アルゴリズム、検証ルール、SDK パラメータの詳細は、エンジニアに技術マニュアルの [Web Chat の埋め込みと SDK › 署名検証](https://docs.maiagent.ai/tech/serve/web-chat-sdk#source-id-signature)を参照してもらってください。

### 1. バックエンドで署名を計算する <a href="#backend-signature" id="backend-signature"></a>

ユーザーが会話に入るたびに、貴社のバックエンドが署名シークレットを使ってタイムスタンプ `ts` と署名 `sig` を計算します。アルゴリズムと 3 言語のサンプルは、技術マニュアルの[署名検証](https://docs.maiagent.ai/tech/serve/web-chat-sdk#source-id-signature)をご覧ください。

### 2. フロントエンドで埋め込みスクリプトに渡す <a href="#frontend-setup-auth" id="frontend-setup-auth"></a>

フロントエンドは、Source ID とバックエンドで計算済みの `ts`、`sig` を埋め込みスクリプトに渡します。

{% code overflow="wrap" %}

```javascript
window.MaiAgent.auth.setup({ sourceId, name, ts, sig });
```

{% endcode %}

埋め込み設定の `auth` フィールドに直接記述することもでき、その場合は埋め込みスクリプトの読み込み後に自動的に反映されます。記述方法は技術マニュアルをご覧ください。

{% hint style="warning" %}
管理画面で生成されたサンプルに `setupAuth` と表示されている場合は、`auth.setup` に読み替えてください。
{% endhint %}

### 3. 連携時の注意事項 <a href="#integration-notes" id="integration-notes"></a>

* **アクセスのたびに署名し直す**：同じ署名は 1 回しか成功しないため、埋め込み側で署名をキャッシュしてはいけません。
* **署名はバックエンドで計算する**：シークレットがフロントエンドのコードに現れた時点で、公開されたのと同じです。
* **時計を正確に保つ**：システムは 60 秒までの時計のずれを許容します。タイムスタンプがこの範囲を超えると拒否されます。
* **チャットプラットフォームの識別子を正しく指定する**：署名にはチャットプラットフォームの識別子が含まれるため、別のチャットプラットフォームの識別子で計算した署名は通りません。

## <mark style="color:blue;">四、動作一覧</mark> <a href="#behavior" id="behavior"></a>

| 受信したリクエスト                         | 結果              |
| --------------------------------- | --------------- |
| Source ID ＋ 有効な署名あり               | ログイン画面なしで直接会話   |
| Source ID あり、署名が不正または期限切れ         | 拒否              |
| 同じ署名を繰り返し使用                       | 1 回目は成功、2 回目は拒否 |
| Source ID なし（公開 URL を直接開いた場合を含む）  | ログインページへ誘導      |
| 検証方式が「Source ID のみ」＋ Source ID あり | 署名を検証せず直接会話     |
| このスイッチがオフ                         | 従来のログイン設定の動作を維持 |

{% hint style="info" %}
拒否されるケースでは、外部への応答はすべて同一で、失敗の理由も、その Source ID が存在するかどうかも明かされません。理由は管理画面の署名検証の失敗ログにのみ記録されます。
{% endhint %}

## <mark style="color:blue;">五、署名検証の失敗ログ</mark> <a href="#verification-failures" id="verification-failures"></a>

連携がうまくいかない場合は、設定セクションの「<mark style="color:blue;">署名検証の失敗ログを表示</mark>」をクリックすると、直近の失敗イベントを確認でき、エンジニアが自分で原因を調査できます。ログにはシークレットや完全な署名は含まれません。

<figure><img src="https://2584873290-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FTvHx8hgwYGDTLD3A7xoW%2Fuploads%2Fgit-blob-97836892fb059355c1a832478e76d6795a3a1719%2Fsourceid-05-verification-failures.png?alt=media" alt=""><figcaption><p>展開された署名検証の失敗ログ</p></figcaption></figure>

| 原因                        | 主な要因                                             |
| ------------------------- | ------------------------------------------------ |
| 署名の期限切れ                   | サーバーの時計のずれ、または埋め込み側が署名をキャッシュしている                 |
| タイムスタンプが未来の許容範囲を超過        | サーバーの時計が 60 秒以上進んでいる                             |
| 署名の不一致（シークレットが一致していない可能性） | バックエンドで使っているシークレットが管理画面と異なる、または署名文字列の組み立て方が誤っている |
| タイムスタンプまたは署名がない           | 埋め込み側が `ts` または `sig` を付けていない                    |
| 署名が使用済み                   | 同じ署名を 2 回送信した                                    |
| リプレイ防止キャッシュが利用不可          | プラットフォーム側の一時的な状況。システムは許可せず拒否します                  |
| Source ID が複数のコンタクトに対応    | そのチャットプラットフォームに、同じ Source ID の重複したコンタクトデータが存在する  |

## <mark style="color:blue;">六、よくある質問</mark> <a href="#faq" id="faq"></a>

<details>

<summary>署名の有効期限が切れると、ユーザーの会話は中断されますか？</summary>

いいえ。有効期限が制限するのは「この署名で本人性を取得できる期間」だけです。本人性を取得したあとの会話の存続期間は、Web Chat の既存の仕組みに従い、署名の期限の影響を受けません。

</details>

<details>

<summary>同じ Source ID が複数のコンタクトに対応することはありますか？</summary>

同一のチャットプラットフォーム内では、1 つの Source ID は 1 人のコンタクトにのみ対応します。同じ Source ID を複数のチャットプラットフォームで使用した場合は、プラットフォームごとに別々のコンタクトが作られ、会話履歴は互いに独立します。

</details>

<details>

<summary>この設定をオンにすると、既存の埋め込みに影響しますか？</summary>

この設定は初期状態でオフであり、既存のチャットプラットフォームの動作は一切変わりません。オンにして署名モードを選択した場合、`ts` と `sig` を付けていないリクエストはログインページへ誘導されます。そのため、オンにする前に、埋め込み側が更新済みであることをエンジニアと確認してください。

</details>

<details>

<summary>ユーザーが自社サイトでログアウトしたあとも、会話を続けられますか？</summary>

すでに本人性を取得したユーザーは、その回の会話を続けられます。貴社で制御できるのは発行側です。ユーザーがログアウトしたら新しい署名を発行しなければ、そのユーザーは本人性を取得できなくなります。「ログアウトと同時に無効にしたい」場合は、弊社までご連絡ください。別途、対応方法を検討します。

</details>

<details>

<summary>Source ID でアクセスしたユーザーの場合、AI がツールを呼び出す際にそのユーザーのログイン認証情報が付与されますか？</summary>

いいえ。「[Keycloak のログイン ID を引き継いでツールを呼び出す](/maiagent-user-guide/ja/build/choose-channel/web-chat.md#keycloak-token-passthrough)」は、実際に Keycloak でログインした訪問者にのみ有効です。本人性は、会話の作成時に紐付けられた組織メンバーに基づいており、埋め込み側が渡した Source ID は使用されないため、Source ID を使って他人の認証情報になりすますことはできません。ツールでユーザーを識別する必要がある場合は、Keycloak ログインとこの機能を組み合わせるか、コンタクトに [MCP 認証情報](/maiagent-user-guide/ja/build/tools/setup-contacts-mcp-credentials.md)を設定してください。

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.maiagent.ai/maiagent-user-guide/ja/build/choose-channel/web-chat/source-id-access.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
