シングル サインオンについて

この記事の対象: SDK v4

シングル サインオン (SSO) を使用すると、独立したアプリケーション間でリソースへのアクセスを共有できます。 たとえば、ユーザーはルート ボットのサービスにサインインし、ルート ボットはアクセス トークンをスキル ボットと共有するようにできます。 現時点では、Microsoft Entra ID ID プロバイダーのみがサポートされています。

SSO は次のようなシナリオに適用されます。

  • ルート ボットおよび 1 つまたは複数のスキル ボット。 ユーザーはルート ボットからサインインします。 その後、ボットはユーザーに代わって複数のスキルを呼び出します。
  • Web サイトに埋め込まれたWeb チャット コントロール。 ユーザーは Web サイトからサインインします。 その後、Web サイトはユーザーに代わってボットまたはスキルを呼び出します。

SSO には次の利点があります。

  • ユーザーは複数回サインインする必要はありません。
  • ルート ボットまたは Web サイトは、ユーザーのアクセス許可を知る必要はありません。

Note

SSO は、Bot Framework SDK バージョン 4.8 以降で使用できます。

SSO コンポーネントの相互作用

次の時系列の図は、SSO のさまざまなコンポーネント間の相互作用を示しています。

  • 次の図に、ルート ボットのフローを示します。

    SSO sequence diagram for a root bot.

  • 次の図は、Web チャット コントロールのフローとフォールバック フローを示しています。

    SSO sequence diagram for a Web Chat control.

    トークン交換が失敗した場合、フォールバックはユーザーにサインインを求めるメッセージを表示します。 このようなエラーは、追加のアクセス許可が必要な場合、またはトークンが間違ったサービス用である場合に発生する可能性があります。

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

  1. クライアントは、ボットとの会話を開始して OAuth シナリオをトリガーします。

  2. ボットは OAuth カードをクライアントに送り返します。

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

  4. このプロパティが存在する場合、クライアントはボットに TokenExchangeInvokeRequest を送信します。 クライアントは、ユーザーの交換可能なトークンを持っている必要があります。これは Microsoft Entra ID トークンである必要があり、そのオーディエンスは TokenExchangeResource.Uri プロパティと同じである必要があります。 クライアントは、次に示す本文を持つ呼び出しアクティビティをボットに送信します。

    {
        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": {
            "id": "<any unique ID>",
            "connectionName": "<connection Name on the skill bot (from the OAuth Card)>",
            "token": "<exchangeable token>"
        }
    }
    
  5. ボットは TokenExchangeInvokeRequest を処理し、クライアントに TokenExchangeInvokeResponse を返します。 クライアントは、TokenExchangeInvokeResponse を受け取るまで待つ必要があります。

    {
        "status": "<response code>",
        "body": {
            "id":"<unique ID>",
            "connectionName": "<connection Name on the skill bot (from the OAuth Card)>",
            "failureDetail": "<failure reason if status code isn't 200, null otherwise>"
        }
    }
    
  6. TokenExchangeInvokeResponsestatus200 の場合、クライアントは OAuth カードを表示しません。 "通常のフロー" 図を参照してください。 他の status の場合、または TokenExchangeInvokeResponse を受け取っていない場合、クライアントは OAuth カードをユーザーに表示します。 "フォールバックのフロー" 図を参照してください。 これにより、エラーの発生時や、ユーザーの同意などの満たされない依存関係があった場合に、SSO フローが確実に通常の OAuthCard フローにフォールバックできます。

次のステップ