Web チャットでのシングル サインオン

この記事の対象: SDK v4

シングル サインオン (SSO) を使用すると、Web チャット コントロールなどのクライアントが、ユーザーに代わってボットと通信できます。 現時点では、Microsoft Entra ID ID プロバイダーのみがサポートされています。

通常、Web チャットは Web サイト ページに埋め込まれます。 ユーザーが Web サイトにサインインすると、Web チャットはユーザーの代わりにボットを呼び出します。 Web サイト クライアントのトークンは、ユーザーの資格情報に基づいて、ボットにアクセスするために別のトークンと交換されます。 この方法では、ユーザーは 2 回サインインする必要はありません。初回は Web サイトでサインインし、2 回目はボットによって行われるので、SSO という用語が使われています。

次の図は、Web チャット クライアントを使用する場合の SSO フローを示しています。

Sequence diagram for sign-on flow for Web Chat.

エラーが発生した場合、SSO は OAuth カードを表示する既存の動作にフォールバックします。 エラーは、ユーザーの同意が必要な場合、またはトークン交換が失敗した場合に発生する可能性があります。

フローを分析してみましょう。

  1. ユーザーは Web サイトにサインインします。

  2. OAuth トリガー アクティビティは、Web チャットによって受信されます。

  3. Web チャットは、OAuth トリガー アクティビティを介してボットとの会話を開始します。

  4. ボットは OAuth カードを Web チャットに送り返します。

  5. Web チャットは、OAuth カードをユーザーに表示する前にインターセプトし、TokenExchangeResource プロパティが含まれているかどうかを確認します。

  6. プロパティが存在する場合、Web チャットはユーザーの交換可能なトークンを取得する必要があります。これは Microsoft Entra ID トークンである必要があります。

  7. Web チャットは、次に示す本文を持つ呼び出しアクティビティをボットに送信します。

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": {
            "id": "<any unique ID>",
            "connectionName": "<connection name on the bot (from the OAuth Card)>",
            "token": "<exchangeable token>"
        }
    }
    
  8. ボットは、交換可能なトークンを取得する要求を Azure AI Bot Service に発行することによって TokenExchangeInvokeRequest を処理します。

  9. Azure AI Bot Service は、トークンをボットに送信します。

  10. ボットは、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>"
        }
    }
    
  11. TokenExchangeInvokeResponsestatus200 の場合、Web チャットは OAuth カードを表示しません。 他の status の場合、または TokenExchangeInvokeResponse を受け取っていない場合、Web チャットは OAuth カードをユーザーに表示します。 これにより、エラーが発生した場合、満たされなかっ依存関係 (ユーザーの同意など) がある場合に、SSO フローが通常の OAuthCard フローにフォールバックします。

実装例については、この SSO サンプルを参照してください。