Web チャットにシングル サインオンを追加するAdd single sign on to Web Chat

適用対象: SDK v4APPLIES TO: SDK v4

シングルサインオン (SSO) を使用すると、Web チャットコントロールなどのクライアントは、ユーザーの代わりに bot と通信できます。Single sign on (SSO) allows a client, such as a Web Chat control, to communicate with a bot on behalf of the user. 現時点では、Azure AD v2 ID プロバイダーのみがサポートされています。Currently, only the Azure AD v2 identity provider is supported.

通常、Web チャットは web サイトのページに埋め込まれています。Typically, a Web Chat is embedded in a website page. ユーザーが web サイトにサインオンすると、Web チャットはユーザーに代わって bot を呼び出します。When the user sign on the website, the Web Chat invokes a bot on behalf of the user. Web サイトクライアントのトークンは、ユーザーの資格情報に基づいて、bot にアクセスするために交換されます。The website client's token, based on the user's credentials, is exchanged for a different one to access the bot. このようにして、ユーザーは2回サインオンする必要がありません。web サイトで初めて、2回目は、SSO という用語です。In this way, the user does not have to sign on twice; the first time on the website, and the second time on the bot, hence the term SSO.

次の図は、Web チャットクライアントを使用する場合の SSO フローを示しています。The following diagram shows the SSO flow when using a Web Chat client.

WebChat でのボットの SSO

障害が発生した場合、SSO は OAuth カードを表示する既存の動作にフォールバックします。In the case of failure, SSO falls back to the existing behavior of showing the OAuth card. エラーは、たとえば、ユーザーの同意が必要な場合やトークンの交換が失敗した場合などに発生することがあります。The failure may be caused for example if the user consent is required or if the token exchange fails.

フローを分析してみましょう。Let's analyze the flow.

  1. Web サイトでユーザーがサインオンします。The user sign on the website.

  2. OAuth トリガーアクティビティは、Web チャットによって受信されます。An OAuth trigger activity is received by the Web Chat.

  3. Web チャットは、OAuth トリガーアクティビティを使用して bot とのメッセージ交換を開始します。The Web Chat starts a conversation with the bot via an OAuth trigger activity.

  4. Bot は、OAuth カードを Web チャットに送り返します。The bot sends back an OAuth Card to the Web Chat.

  5. Web チャットは、OAuth カードをユーザーに表示する前にインターセプトし、プロパティが含まれているかどうかを確認し TokenExchangeResource ます。The Web Chat intercepts the OAuth card before displaying it to the user and checks if it contains a TokenExchangeResource property.

  6. プロパティが存在する場合、Web チャットはユーザーのために変更可能なトークンを取得する必要があります。これは、Azure AD v2 トークンである必要があります。If the property exists, the Web Chat must get an exchangeable token for the user, which must be an Azure AD v2 token.

  7. Web チャットは、次のような本文を持つ呼び出しアクティビティを bot に送信します。The Web Chat sends an Invoke activity to the bot with the body shown below.

        "type": "Invoke",
        "name": "signin/tokenExchange",
        "value": {
            "id": "<any unique Id>",
            "connectionName": "<connection name on the bot (from the OAuth Card)>",
            "token": "<exchangeable token>"
  8. Bot は、 TokenExchangeInvokeRequest Azure Bot Service に要求を発行して、変更可能なトークンを取得することによってを処理します。The bot processes the TokenExchangeInvokeRequest by issuing a request to the Azure Bot Service to obtain an exchangeable token.

  9. Azure Bot Service は、このトークンを Bot に送信します。The Azure Bot Service sends the token to the bot.

  10. Bot は、を TokenExchangeInvokeResponse Web チャットに戻します。The bot returns a TokenExchangeInvokeResponse back to the Web Chat. Web チャットはを受信するまで待機し TokenExchangeInvokeResponse ます。The Web Chat waits till it receives the TokenExchangeInvokeResponse.

        "status": "<response code>",
        "body": {
            "id":"<unique Id>",
            "connectionName": "<connection Name on the bot (from the OAuth Card)>",
            "failureDetail": "<failure reason if status code is not 200, null otherwise>"
  11. TokenExchangeInvokeResponseのがの場合 status 200 、Web チャットは OAuth カードを表示しません。If the TokenExchangeInvokeResponse has a status of 200, then the Web Chat does not show the OAuth card. それ以外の status 場合、またはを受け取っていない場合は、Web チャットによって TokenExchangeInvokeResponse OAuth カードがユーザーに表示されます。For any other status or if the TokenExchangeInvokeResponse is not received, then the Web Chat shows the OAuth card to the user. これにより、エラーが発生した場合、満たされなかっ依存関係 (ユーザーの同意など) がある場合に、SSO フローが通常の OAuthCard フローにフォールバックします。This ensures that the SSO flow falls back to normal OAuthCard flow, in case of any errors or unmet dependencies like user consent.

実装の例については、こちらの SSO サンプルを参照してください。For an implementation example, please refer to this SSO sample.