この記事の対象: SDK v4
シングル サインオン (SSO) を使用すると、Web チャット コントロールなどのクライアントが、ユーザーに代わってボットと通信できます。 現時点では、Microsoft Entra ID ID プロバイダーのみがサポートされています。
通常、Web チャットは Web サイト ページに埋め込まれます。 ユーザーが Web サイトにサインインすると、Web チャットはユーザーの代わりにボットを呼び出します。 Web サイト クライアントのトークンは、ユーザーの資格情報に基づいて、ボットにアクセスするために別のトークンと交換されます。 この方法では、ユーザーは 2 回サインインする必要はありません。初回は Web サイトでサインインし、2 回目はボットによって行われるので、SSO という用語が使われています。
次の図は、Web チャット クライアントを使用する場合の SSO フローを示しています。
エラーが発生した場合、SSO は OAuth カードを表示する既存の動作にフォールバックします。 エラーは、ユーザーの同意が必要な場合、またはトークン交換が失敗した場合に発生する可能性があります。
フローを分析してみましょう。
ユーザーは Web サイトにサインインします。
OAuth トリガー アクティビティは、Web チャットによって受信されます。
Web チャットは、OAuth トリガー アクティビティを介してボットとの会話を開始します。
ボットは OAuth カードを Web チャットに送り返します。
Web チャットは、OAuth カードをユーザーに表示する前にインターセプトし、
TokenExchangeResourceプロパティが含まれているかどうかを確認します。プロパティが存在する場合、Web チャットはユーザーの交換可能なトークンを取得する必要があります。これは Microsoft Entra ID トークンである必要があります。
Web チャットは、次に示す本文を持つ呼び出しアクティビティをボットに送信します。
{ "type": "Invoke", "name": "signin/tokenExchange", "value": { "id": "<any unique ID>", "connectionName": "<connection name on the bot (from the OAuth Card)>", "token": "<exchangeable token>" } }ボットは、交換可能なトークンを取得する要求を Azure AI Bot Service に発行することによって
TokenExchangeInvokeRequestを処理します。Azure AI Bot Service は、トークンをボットに送信します。
ボットは、Web チャットに
TokenExchangeInvokeResponseを返します。 Web チャットは、TokenExchangeInvokeResponseを受信するまで待機します。{ "status": "<response code>", "body": { "id":"<unique ID>", "connectionName": "<connection Name on the bot (from the OAuth Card)>", "failureDetail": "<failure reason if status code isn't 200, null otherwise>" } }TokenExchangeInvokeResponseのstatusが200の場合、Web チャットは OAuth カードを表示しません。 他のstatusの場合、またはTokenExchangeInvokeResponseを受け取っていない場合、Web チャットは OAuth カードをユーザーに表示します。 これにより、エラーが発生した場合、満たされなかっ依存関係 (ユーザーの同意など) がある場合に、SSO フローが通常の OAuthCard フローにフォールバックします。
実装例については、この SSO サンプルを参照してください。