ボットに認証を追加する

適用対象: SDK v4

Azure Bot Service v4 SDK は、ユーザー認証を必要とするオンライン リソースにアクセスできるボットの開発を容易にします。 Azure では OAuth 2.0 を使用して各ユーザーの資格情報に基づいてトークンを生成するため、ボットで認証トークンを管理する必要はありません。 ボットでは、Azure によって生成されたトークンを使用して、それらのリソースにアクセスします。 この方法では、セキュリティで保護されたリソースにアクセスするために、ユーザーはボットに ID とパスワードを指定する必要はなく、信頼できる ID プロバイダーにのみアクセスできます。

Bot Framework がこの種の認証を処理する方法の概要については、「 ユーザー認証」を参照してください。

この記事では、2 つのサンプルを参照します。 1 つは、認証トークンを取得する方法を示しています。 もう 1 つは複雑で、ユーザーの代わりに Microsoft Graph にアクセスする方法を示しています。 どちらの場合も、Azure Active Directory (Azure AD) v1 または v2 を ID プロバイダーとして使用して、ボットの OAuth トークンを取得できます。 この記事では、次の方法について説明します。

  • Azure Bot リソースを作成する
  • Azure AD ID プロバイダーを作成する
  • Azure AD ID プロバイダーをボットに登録する
  • ボット コードを準備する

この記事を完了すると、いくつかの簡単なタスクに応答できるボットが作成されます。 Microsoft Graph の例では、メールの送信、現在のユーザーの表示、最近のメールの確認を行うことができます。 OAuth 機能をテストするためにボットを発行する必要はありません。ただし、ボットには有効な Azure アプリ ID とパスワードが必要です。

注意

Bot Framework Python と Java SDK は、2023 年 11 月に終了する最終的な長期サポートで廃止されます。 このリポジトリ内の重要なセキュリティとバグの修正のみが行われます。 これらの SDK を使用して構築された既存のボットは引き続き機能します。

新しいボット開発の場合は、 Power Virtual Agents の使用を検討してください。 詳細については、「 ボット構築の未来」を参照してください。

Web チャットと Direct Line に関する考慮事項

重要

Web チャット コントロールを使用してボットに接続するときのセキュリティ リスクを軽減するには、強化された認証を有効にしたDirect Lineを使用する必要があります。 詳細については、「Direct Line強化された認証」を参照してください。

前提条件

  • ボットの基本状態の管理ダイアログ ライブラリ連続して行われる会話フローを実装する方法、ダイアログを再利用する方法に関する知識。

  • Azure と OAuth 2.0 開発の知識。

  • .NET 用の Visual Studio 2017 以降。

  • JavaScript のNode.js。

  • Python 用 Python 3.8 以降

  • 次に示すサンプルのいずれか。

    サンプル BotBuilder のバージョン 対象
    C# または JavaScript または Java または Python での認証 v4 OAuthCard サポート
    C# または JavaScript または Java または Python でのMicrosoft Graph の認証 v4 OAuth 2.0 でのMicrosoft Graph APIサポート
    C# または JavaScript または Java または Python でのMicrosoft Teams の認証 v4 OAuth 2.0 でのMicrosoft Graph APIサポート

    この記事で参照されているサンプルを実行するには、次のものが必要です。

    • ボット リソースを Azure に登録する Azure Active Directory (Azure AD) アプリケーション。 このアプリケーションを使用すると、ボットはMicrosoft Graph などのセキュリティで保護された外部リソースにアクセスできます。 また、ユーザーは Web チャットなどの複数のチャネルを介してボットと通信できます。
    • ID プロバイダーとして機能する別の Azure AD アプリケーション。 このアプリケーションは、ボットとセキュリティで保護されたリソースの間で OAuth 接続を確立するために必要な資格情報を提供します。 この記事では、ID プロバイダーとして Active Directory を使用することに注意してください。 他にも多くのプロバイダーがサポートされています。

重要

Azure でボットを登録すると必ず、Azure AD アプリケーションが割り当てられますが、 このアプリケーションで保護されるのは、チャネルからボットへのアクセスです。 ユーザーに代わってボットがアクセスする外部のセキュリティで保護されたリソースごとに、追加の Azure AD アプリケーションが必要です。

リソースを作成する

Azure Bot リソースを作成します。これにより、ボットを Azure Bot Serviceに登録できます。

ヒント

新しい Web アプリ ボットボット チャネルの登録 リソースを作成することはできません。ただし、構成およびデプロイされた既存のリソースは引き続き機能します。 SDK バージョン 4.14.1.2 以降の VSIX または Yeoman テンプレートから作成されたボットには、Azure Bot リソースを生成する ARM テンプレートが含まれています。

  1. Azure ポータルにアクセスします。

  2. 右側のウィンドウで、[ リソースの作成] を選択します。

  3. 検索ボックスに「」と入力 botし、 Enter キーを押します。

  4. Azure Bot カードを選択します。

    Azure ボット リソースを選択する

  5. [作成] を選択します

  6. 必須フィールドに値を入力し、設定を確認および更新します。

    1. [プロジェクトの 詳細] に情報を入力します。 ボットのデータ所在地がグローバルかローカルかを選択します。 現在、ローカル データ所在地機能は、"westeurope" リージョン内のリソースでのみ使用できます。 詳細については、「Azure Bot Service での地域化」を参照してください。

      Azure Bot リソースのプロジェクトの詳細設定

    2. [Microsoft アプリ ID] に情報を入力します。 Azure でボット ID を管理する方法と、新しい ID を作成するか、既存の ID を使用するかを選択します。

      Azure Bot リソースのMicrosoftアプリ ID 設定

  7. [Review + create](レビュー + 作成) を選択します。

  8. 検証に合格した場合は、[ 作成] を選択します。

  9. デプロイが完了したら、[リソースに移動] を選択します。 選択したリソース グループにボットと関連リソースが一覧表示されます。

  10. Bot Framework SDK をまだお持ちでない場合は、[ GitHub からダウンロード ] を選択して、お好みの言語のパッケージを使用する方法を確認します。

    SDK でボットを作成する

これで、Bot Framework SDK を使用してボットを構築する準備ができました。

ヒント

Azure では、新しいアプリ ID を使用して新しいシングルテナントまたはマルチテナントの Azure Bot リソースを作成すると、 パスワードも生成されます。

ボット ID 情報

ボットの構成ファイルに ID 情報を追加するには、次の手順に従います。 ファイルは、ボットの作成に使用するプログラミング言語によって異なります。

重要

Bot Framework SDK の Java バージョンと Python バージョンでは、マルチテナント ボットのみがサポートされます。 C# と JavaScript のバージョンでは、ボットの ID を管理するための 3 つのアプリケーションの種類すべてがサポートされています。

Language ファイル名 メモ
C# appsettings.json ボットの ID を管理するための 3 つのアプリケーションの種類をすべてサポートします。
JavaScript .env ボットの ID を管理するための 3 つのアプリケーションの種類をすべてサポートします。
Java application.properties マルチテナント ボットのみがサポートされます。
Python config.py マルチテナント ボットのみがサポートされます。 ID プロパティをメソッド呼び出しの os.environ.get 引数として指定します。

追加する必要がある ID 情報は、ボットのアプリケーションの種類によって異なります。 構成ファイルに次の値を指定します。

C# および JavaScript ボットでのみ使用できます。

プロパティ
MicrosoftAppType UserAssignedMSI
MicrosoftAppId ユーザー割り当てマネージド ID のクライアント ID。
MicrosoftAppPassword 該当なし。 ユーザー割り当てマネージド ID ボットの場合は、この値を空白のままにします。
MicrosoftAppTenantId ユーザー割り当てマネージド ID のテナント ID。

App Service を更新するには

ボットの既存のApp Service リソース (Web アプリ) があり、ボットがユーザー割り当てマネージド ID アプリケーションである場合は、ボットの App Service を更新する必要がある場合があります。

  1. ボットの Web アプリの [App Service] ブレードに移動します。
  2. [設定] にある [ID] を選択します。
  3. [ ID ] ブレードで、[ ユーザー割り当て済み ] タブと [ 追加 (+)] を選択します。
  4. [ ユーザー割り当てマネージド ID の追加] ブレードで、次の操作を行います。
    1. サブスクリプションを選択します。

    2. [ ユーザー割り当てマネージド ID] で、ボットのマネージド ID を選択します。 マネージド ID が自動的に生成された場合は、ボットと同じ名前になります。

    3. [ 追加] を選択して、ボットにこの ID を使用します。

      ボットのマネージド ID が選択された [App Service ID] ブレード。

アプリまたはテナント ID を取得するには

ボットのアプリまたはテナント ID を取得するには:

  1. ボットの [Azure Bot リソース] ブレードに移動します。
  2. ボットの [構成] ブレードに移動します。 このブレードから、ボットのMicrosoftアプリ ID またはアプリ テナント ID をコピーできます。

新しいパスワードを生成するには

シングルテナント ボットとマルチテナント ボットには、一部の操作に必要なアプリ シークレットまたはパスワードがあります。 Azure Bot Serviceではボット シークレットが非表示になります。 ただし、ボットの App Service リソースの所有者は、新しいパスワードを生成できます。

  1. ボットの [Azure Bot リソース] ブレードに移動します。
  2. ボットの [構成] ブレードに移動します。
  3. アプリ サービスの [証明書とシークレット] ブレードに移動するには、[Microsoftアプリ ID] の横にある [管理] を選択します。
  4. ブレードの指示に従って新しいクライアント シークレットを作成し、安全な場所に値を記録します。

Azure AD ID サービス

Azure Active Directory (Azure AD) は、OAuth 2.0 などの業界標準のプロトコルを使用してユーザーを安全にサインインさせるアプリケーションを構築できるクラウド ID サービスです。

次の 2 つの ID サービスのいずれかを使用できます。

  1. Azure AD 開発者プラットフォーム (v1.0)。 Azure AD v1エンドポイントとも呼ばれ、Microsoft の職場または学校アカウントを使用してユーザーを安全にサインインさせるアプリを構築できます。 詳細については、「開発者向け Azure Active Directory (v1.0) の概要」を参照してください。
  2. Microsoft ID プラットフォーム (v2.0)。 Azure AD v2 エンドポイントとも呼ばれ、Azure AD プラットフォーム (v1.0) の進化版です。 これにより、すべての Microsoft ID プロバイダーにサインインして、Microsoft API (Microsoft Graph など) や開発者が構築した他の API を呼び出すためにトークンを取得するアプリケーションを構築できます。 詳細については、Microsoft ID プラットフォーム (v2.0) の概要に関するページを参照してください。

v1 と v2 エンドポイントの違いについては、「Microsoft ID プラットフォーム (v2.0) に更新する理由」を参照してください。 完全な情報については、Microsoft ID プラットフォーム (旧称: 開発者向け Azure Active Directory) に関する記事を参照してください。

Azure AD ID プロバイダーを作成する

このセクションでは、OAuth 2.0 を使用してボットを認証する Azure AD ID プロバイダーを作成する方法について説明します。 Azure AD v1 または Azure AD v2 エンドポイントを使用できます。

ヒント

アプリケーションによって要求されたアクセス許可の委任に同意できるテナントに Azure AD アプリケーションを作成して登録する必要があります。

  1. Azure portal で [Azure Active Directory] パネルを開きます。 正しいテナントにいない場合は、[ ディレクトリの切り替え ] を選択して正しいテナントに切り替えます。 (テナントの作成方法については、「 ポータルにアクセスしてテナントを作成する」を参照してください)。

  2. [アプリの登録] パネルを開きます。

  3. [アプリの登録] パネルで、[新規登録] を選択します。

  4. 必須のフィールドに入力してアプリ登録を作成します。

    1. アプリケーションに名前を付けます。

    2. ご自分のアプリケーションについて、 [サポートされているアカウントの種類] を選択します。 (このサンプルは、これらのオプションのどれを使用しても動作します。)

    3. [ リダイレクト URI] で [ Web ] を選択し、 URL をサポートされている OAuth リダイレクト URL のいずれかに設定します

    4. [登録] を選択します。

      • 作成されると、アプリの [概要 ] ページが表示されます。
      • [アプリケーション (クライアント) ID] の値を記録します。 接続文字列を作成し、Azure AD プロバイダーをボットの登録に登録するときに、この値を クライアント ID として後で使用します。
      • [ディレクトリ (テナント) ID] の値を記録します。 この値を使用して、このプロバイダー アプリケーションをボットに登録します。
  5. ナビゲーション ウィンドウで、[ 証明書 & シークレット ] を選択して、アプリケーションのシークレットを作成します。

    1. [クライアント シークレット] で、 [新しいクライアント シークレット] を選択します。
    2. 説明を追加します (bot login など)。必要に応じてこのアプリのために作成する他のシークレットからこれを識別するためです。
    3. [ 有効期限] で、シークレットの有効期限が切れる時間を選択します。
    4. [追加] を選択します。
    5. 証明書&シークレットを終了する前に、シークレットを記録します。 この値は、後で Azure AD アプリケーションをボットに登録するときに 、クライアント シークレット として使用します。
  6. ナビゲーション ウィンドウで [ API のアクセス許可 ] を選択して、[ API のアクセス許可 ] パネルを開きます。 アプリの API アクセス許可を明示的に設定することをお勧めします。

    1. [ アクセス許可の追加] を選択して、[ API のアクセス許可の要求 ] ウィンドウを表示します。

    2. このサンプルでは、 [Microsoft API][Microsoft Graph] を選択します。

    3. [委任されたアクセス許可] を選択し、必要とするアクセス許可が選択されていることを確認します。 このサンプルでは、これらのアクセス許可が必要です。

      注意

      [管理者の同意が必要] とマークされているアクセス許可は、ユーザーとテナント管理者の両方がログインすることを要求するため、ボットではこれらのアクセス許可を避けるのが一般的です。

      • openid
      • profile
      • Mail.Read
      • Mail.Send
      • User.Read
      • User.ReadBasic.All
    4. [アクセス許可の追加] を選択します. (ユーザーがボットを介してこのアプリに初めてアクセスする場合は、同意を付与する必要があります)。

これで、Azure AD アプリケーションが構成されました。

注意

接続文字列を作成し、ID プロバイダーをボット登録に登録するときに、 アプリケーション (クライアント) IDクライアント シークレットを割り当てます。 次のセクションをご覧ください。

Azure AD ID プロバイダーをボットに登録する

次の手順では、ID プロバイダーをボットに登録します。

  1. Azure portalでボットの Azure Bot リソース ページを開きます。

  2. [設定] を選択します。

  3. ページの下部付近にある [ OAuth 接続設定] で、[ 設定の追加] を選択します。

  4. 次のようにフォームに入力します。

    1. 名前。 接続の名前を入力します。 ボットのコードで使用します。

    2. サービス プロバイダー[Azure Active Directory v2] を選択して、Azure AD 固有のフィールドを表示します。

    3. クライアント ID。Azure AD v2 ID プロバイダー用に記録したアプリケーション (クライアント) ID を入力します。

    4. クライアント シークレット。 Azure AD v2 ID プロバイダー用に記録したシークレットを入力します。

    5. トークン交換 URL。 Azure AD v2 での SSO にのみ使用されるため、空白のままにします。

    6. テナント ID。 Azure AD アプリ用に前に記録した ディレクトリ (テナント) ID を 入力するか、Azure DD アプリの作成時に選択したサポートされているアカウントの種類に応じて 共通 の ID を入力します。 割り当てる値を決定するには、次の条件に従います。

      • Azure AD アプリを作成するときに、この組織ディレクトリ内のアカウントのみ (Microsoftのみ - シングル テナント) を選択した場合は、Azure AD アプリ用に前に記録したテナント ID を入力します。
      • ただし、任意の組織ディレクトリ (任意の Azure AD ディレクトリ内のアカウント - マルチテナントと個人用Microsoft アカウント (Xbox、Outlook.com など) または任意の組織ディレクトリ (Microsoft Azure AD ディレクトリ - マルチテナント) のアカウント) を選択した場合は、テナント ID の代わりに「」と入力commonします。 それ以外の場合、Azure AD アプリは、ID が選択されたテナントを通じて確認し、個人用Microsoft アカウントを除外します。

      これは、認証可能なユーザーに関連付けられるテナントになります。 詳細については、「Azure Active Directory のテナント」をご覧ください。

    7. [ スコープ] に、アプリケーション登録から選択したアクセス許可の名前を入力します。 テストの目的で、次のように入力できます。 openid profile

      注意

      Azure AD v2 の場合、 [スコープ] フィールドはスペースで区切った値のリストであり、大文字と小文字が区別されます。

  5. [保存] を選択します。

注意

これらの値によって、アプリケーションは Microsoft Graph API 経由で Office 365 データにアクセスできます。 また、 トークン交換 URL は Azure AD v2 での SSO にのみ使用されるため、空白のままにする必要があります。

接続をテストする

  1. 接続エントリを選択して、作成した接続を開きます。
  2. [サービス プロバイダー の接続 設定] ウィンドウの上部にある [ テスト接続] を選択 します。
  3. 初回は新しいブラウザー タブが開き、アプリが要求しているアクセス許可の一覧が表示され、承認を求められます。
  4. [Accept](承認) を選択します。
  5. これにより、 テスト接続 <にリダイレクトされ、接続名> が [成功] ページにリダイレクトされます

ボット コードでこの接続名を使用してユーザー トークンを取得できるようになりました。

ボット コードを準備する

このプロセスを完了するには、ボットのアプリ ID とパスワードが必要です。

  1. 使用するサンプルを GitHub リポジトリから複製します:Microsoft Graph のボット認証またはボット認証

  2. appsettings.json を更新します。

    • ConnectionName を、お使いのボットに追加した OAuth 接続設定の名前に設定します。

    • MicrosoftAppId および MicrosoftAppPassword を、お使いのボットのアプリ ID とアプリ シークレットに設定します。

      お使いのボット シークレットに含まれる文字によっては、パスワードを XML でエスケープすることが必要な場合があります。 たとえば、アンパサンド (&) は として &amp;エンコードする必要があります。

    {
      "MicrosoftAppType": "",
      "MicrosoftAppId": "",
      "MicrosoftAppPassword": "",
      "MicrosoftAppTenantId": "",
      "ConnectionName": ""
    }
    
  3. Startup.cs の更新:

    政府 クラウドなどの非パブリック Azure クラウド、またはデータ所在地を持つボットで OAuth を使用するには、 Startup.cs ファイルに次のコードを追加する必要があります。

    string uri = "<uri-to-use>";
    MicrosoftAppCredentials.TrustServiceUrl(uri);
    OAuthClientConfig.OAuthEndpoint = uri;
    

    ここで <、uri-to-use> は次のいずれかの URI です。

    URI 説明
    https://europe.api.botframework.com ヨーロッパのデータ所在地を持つパブリック クラウド ボットの場合。
    https://unitedstates.api.botframework.com 米国にデータ所在地があるパブリック クラウド ボットの場合。
    https://api.botframework.azure.us データ所在地のない米国政府機関向けクラウド ボットの場合。
    https://api.botframework.com データ所在地のないパブリック クラウド ボットの場合。 これは既定の URI であり、 Startup.cs を変更する必要はありません。

Microsoftアプリ IDMicrosoftアプリ パスワードの値を取得するには、「登録パスワードを取得する」を参照してください。

注意

これで、このボット コードを Azure サブスクリプションに発行できました (プロジェクトを右選択して [ 発行] を選択します)。ただし、この記事では必要ありません。 Azure portal でボットを構成するときに使用したアプリケーションとホスティング プランを使用する発行構成を設定する必要があります。

エミュレーターを使用してボットをテストする

まだインストールしていない場合は、Bot Framework Emulatorをインストールします。 「 エミュレーターを使用したデバッグ」も参照してください。

ボットのサンプル ログインを機能させるには、「エミュレーターを認証用に構成する」に示すように エミュレーターを構成する必要があります。

テスト

認証メカニズムを構成したら、実際のボット サンプル テストを実行できます。

注意

ボット サンプルの実装方法により、”マジック コード" を入力するように求められる場合があります。 このマジック コードは RFC # 7636 の一部であり、さらなるセキュリティ要素を追加するために用意されています。 マジック コードを削除すると、セキュリティ リスクが高まります。 これは、拡張認証が有効になっているDirect Lineを使用して軽減できます。 詳細については、「 Bot Framework の強化された認証」を参照してください。

  1. お使いのマシン上でローカルでボット サンプルを実行します。
  2. エミュレーターを起動します。
  3. ボットに接続するときは、ボットのアプリ ID とパスワードを指定する必要があります。
    • Azure アプリの登録からアプリ ID とパスワードを取得します。 これらは、appsettings.json または .env ファイルでボット アプリに割り当てたものと同じ値です。 エミュレーターでは、これらの値を構成ファイルに割り当てるか、ボットに初めて接続するときに割り当てます。
    • ボット コード内のパスワードを XML エスケープする必要がある場合は、ここでもそれを行う必要があります。
  4. help と入力すると、ボットで使用できるコマンドの一覧が表示され、認証機能をテストします。
  5. サインインした後は、サインアウトするまで、資格情報を再度入力する必要はありません。
  6. サインアウトして認証をキャンセルするには、logout と入力します。

注意

ボット認証には、Bot Connector サービスを使用する必要があります。 サービスは、Azure Bot リソースから情報にアクセスします。

認証の例

ボット認証サンプルでは、ダイアログは、ユーザーのログイン後、ユーザー トークンを取得するように設計されています。

認証サンプル ボットとのサンプル会話。

Microsoft Graph の認証の例

Microsoft Graph のボット認証のサンプルでは、ユーザーがログインした後に限られたコマンド セットを受け入れるようにダイアログが設計されています。

Microsoft Graph 認証サンプル ボットとのサンプル会話。


関連情報

ユーザーがボットに何らかの処理を要求し、それによってボットでユーザーのログインが必要になった場合、ボットによって OAuthPrompt が使用され、特定の接続に必要なトークンの取得が開始されます。 OAuthPrompt では、以下で構成されるトークン取得フローが作成されます。

  1. 既に Azure Bot Service に現在のユーザーおよび接続用のトークンがあるかどうかを確認するためのチェック。 トークンがある場合は、トークンが返されます。
  2. Azure Bot Serviceにキャッシュされたトークンがない場合は、 OAuthCard が作成されます。これは、ユーザーが選択できるサインイン ボタンです。
  3. ユーザーがサインイン ボタンをOAuthCard選択すると、Azure Bot Service はボットにユーザーのトークンを直接送信するか、チャット ウィンドウに入力する 6 桁の認証コードをユーザーに提示します。
  4. ユーザーに認証コードが表示される場合は、ボットによって、この認証コードがユーザーのトークンと交換されます。

次のセクションでは、一般的な認証タスクが、サンプルによってどのように実装されているかを説明します。

OAuth プロンプトを使用してユーザーをサインインさせて、トークンを取得する

C# サンプルのアーキテクチャ図。

Dialogs\MainDialog.cs

OAuth プロンプトを、コンストラクター内の MainDialog に追加します。 ここでは、接続名の値は appsettings.json ファイルから取得されました。

AddDialog(new OAuthPrompt(
    nameof(OAuthPrompt),
    new OAuthPromptSettings
    {
        ConnectionName = ConnectionName,
        Text = "Please Sign In",
        Title = "Sign In",
        Timeout = 300000, // User has 5 minutes to login (1000 * 60 * 5)
    }));

ダイアログ ステップ内で、BeginDialogAsync を使用して OAuth プロンプトを起動します。これによりユーザーのサインインが求められます。

  • ユーザーがサインイン済みの場合は、ユーザーに問い合わせることなく、トークン応答イベントが生成されます。
  • それ以外の場合は、ユーザーのサインインが求められます。 ユーザーがサインインを試みた後、Azure Bot Service によってトークン応答イベントが送信されます。
return await stepContext.BeginDialogAsync(nameof(OAuthPrompt), null, cancellationToken);

次のダイアログ ステップ内で、前のステップの結果としてトークンが存在することを確認します。 null でない場合、ユーザーは正常にサインインしました。

// Get the token from the previous step. Note that we could also have gotten the
// token directly from the prompt itself. There is an example of this in the next method.
var tokenResponse = (TokenResponse)stepContext.Result;

TokenResponseEvent の待機

OAuth プロンプトを起動すると、そのプロンプトは、ユーザーのトークン取得元となるトークン応答イベントを待ちます。

Bots\AuthBot.cs

AuthBotActivityHandler から派生し、トークン応答イベント アクティビティを明示的に処理します。 ここではアクティブなダイアログを続行します。これにより OAuth プロンプトでイベントを処理し、トークンを取得できます。

protected override async Task OnTokenResponseEventAsync(ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
{
    Logger.LogInformation("Running dialog with Token Response Event Activity.");

    // Run the Dialog with the new Token Response Event Activity.
    await Dialog.RunAsync(turnContext, ConversationState.CreateProperty<DialogState>(nameof(DialogState)), cancellationToken);
}

ユーザーをログアウトする

ユーザーがタイムアウトする接続に依存するのではなく、明示的にサインアウトできるようにすることがベスト プラクティスです。

Dialogs\LogoutDialog.cs

private async Task<DialogTurnResult> InterruptAsync(DialogContext innerDc, CancellationToken cancellationToken = default(CancellationToken))
{
    if (innerDc.Context.Activity.Type == ActivityTypes.Message)
    {
        var text = innerDc.Context.Activity.Text.ToLowerInvariant();

        if (text == "logout")
        {
            // The UserTokenClient encapsulates the authentication processes.
            var userTokenClient = innerDc.Context.TurnState.Get<UserTokenClient>();
            await userTokenClient.SignOutUserAsync(innerDc.Context.Activity.From.Id, ConnectionName, innerDc.Context.Activity.ChannelId, cancellationToken).ConfigureAwait(false);

            await innerDc.Context.SendActivityAsync(MessageFactory.Text("You have been signed out."), cancellationToken);
            return await innerDc.CancelAllDialogsAsync(cancellationToken);
        }
    }

    return null;
}

Teams 認証の追加

OAuth は、Teams では他のチャネルとは異なる方法で処理されます。 Teams 認証ボットのサンプル ( C#JavaScriptJavaまたは Python) は、Teams の認証を適切に実装する方法を示しています。

他のチャネルと Teams の違いの 1 つは、Teams がボットにイベント アクティビティではなく呼び出しアクティビティを送信することです。

Bots/TeamsBot.cs

警告

ご覧になっていたサンプルが移動されたようです。 この問題の修正に取り組んでおりますので、ご安心ください。

OAuth プロンプトを使用する場合は、この呼び出しアクティビティをダイアログに転送する必要があります。 これを行うには、 を使用します TeamsActivityHandler。 次のコードをメイン ダイアログ ファイルに追加します。

Bots/DialogBot.cs

警告

ご覧になっていたサンプルが移動されたようです。 この問題の修正に取り組んでおりますので、ご安心ください。

最後に、ボットのフォルダーの最上位レベルに適切な TeamsActivityHandler ファイル (TeamsActivityHandler.cs C# ボットと teamsActivityHandler.js JavaScript ボットの場合) を追加してください。

TeamsActivityHandlerメッセージの反応アクティビティも送信します。 メッセージの反応アクティビティは、返信先 ID フィールドを使用して元のアクティビティを参照します。 このアクティビティは、Microsoft Teams のアクティビティ フィードでも表示される必要があります。

注意

マニフェストを作成し、セクションにトークン URL を validDomains 含める必要があります。そうしないと、OAuthCard サインイン ボタンは認証ウィンドウを開きません。

  • グローバル ボットの場合、トークン URL は です token.botframework.com
  • リージョン ボットの場合、トークン URL は です europe.token.botframework.com

App Studio を使用して、マニフェストを生成してください。

関連項目