次の方法で共有


ユーザー認証

適用対象: SDK v4

ボットは、電子メールの確認、フライトの状態の確認、注文など、ユーザーに代わってセキュリティで保護されたオンライン リソースにアクセスする必要がある場合があります。 ユーザーは、ボットが自分の代わりに行うことを承認する必要があります。また、ボットを承認するには、ユーザーが自分の ID を認証する必要があります。 OAuth は、ユーザーを認証し、ボットを承認するために使用されます。 「 認証の種類」も参照してください。

OAuth の知識を更新する場合は、次を参照してください。

会話でのユーザー認証

メールの確認、予定表の参照、フライトの状態の確認、注文など、ユーザーに代わって特定の操作を実行するには、ボットは Microsoft Graph、GitHub、会社の REST サービスなどの外部サービスを呼び出す必要があります。 各外部サービスには、これらの呼び出しをセキュリティで保護する方法があります。 これらの要求を発行する一般的な方法は、その外部サービス (JSON Webトークン (JWT) とも呼ばれる) でユーザーを一意に識別するユーザー トークンを使用することです。

外部サービスへの呼び出しをセキュリティで保護するには、ボットがユーザーにサインインを要求して、そのサービスのユーザーのトークンを取得できるようにする必要があります。 多くのサービスでは、OAuth または OAuth2 プロトコルを使用したトークンの取得がサポートされています。

Azure AI Bot Service には、OAuth プロトコルで動作し、トークンのライフ サイクルを管理する専用の サインイン カードとサービスが用意されています。 ボットは、これらの機能を使用してユーザー トークンを取得できます。

  • ボット構成の一環として、 OAuth 接続 は Azure の Azure AI Bot Service リソース内に登録されます。

    接続には、使用する ID プロバイダー に関する情報と、有効な OAuth クライアント ID とシークレット、有効にする OAuth スコープ、その ID プロバイダーに必要なその他の接続メタデータが含まれます。

  • ボットのコードでは、OAuth 接続を使用してユーザーのサインインとユーザー トークンの取得を支援します。

次の図は、認証プロセスに関連する要素を示しています。

Azure AI Bot Service の認証コンポーネント間の関係を示す図。

Bot Framework トークン サービスについて

Bot Framework トークン サービスは、次の役割を担います。

  • さまざまな外部サービスで OAuth プロトコルを使用できるようにします。
  • 特定のボット、チャネル、会話、ユーザーのトークンを安全に格納します。
  • ユーザー トークンの取得。

    ヒント

    ボットに期限切れのユーザー トークンがある場合、ボットは次の操作を行う必要があります。

    • ユーザーをログアウトする
    • サインイン フローをもう一度開始する

たとえば、Microsoft Graph API を使用してユーザーの最近のメールを確認できるボットには、 ID プロバイダーからのユーザー トークン (この場合 は Microsoft Entra ID) が必要です。 設計時に、ボット開発者は次の 2 つの重要な手順を実行します。

  1. Azure portal を使用して、Id プロバイダーである Microsoft Entra ID アプリケーションを Bot Framework トークン サービスに登録します。
  2. ボットの OAuth 接続 ( GraphConnection など) を構成します。

次の図は、Microsoft Graph サービスを使用して電子メール要求が行われた場合の、ユーザーとボットの対話の時間シーケンスを示しています。

ボットがユーザーに代わって電子メールを送信する手順を示すシーケンス図。

  1. ユーザーがボットに電子メール要求を行います。

  2. このメッセージを含むアクティビティは、ユーザーから Bot Framework チャネル サービスに送信されます。 チャネル サービスにより、アクティビティ内の userid フィールドが設定され、メッセージがボットに送信されます。

    ユーザー ID は、ユーザーの Facebook ID や SMS 電話番号など、チャネル固有のものです。

  3. ボットは、OAuth 接続 GraphConnectionの UserId のトークンが既にあるかどうかを確認する要求を Bot Framework トークン サービスに送信します。

  4. このユーザーがボットを操作するのはこれが初めてであるため、Bot Framework Token Service にはこのユーザーのトークンがまだなく、 NotFound の結果がボットに返されます。

    トークンが見つかった場合、認証手順はスキップされ、ボットは保存されたトークンを使用して電子メール要求を行うことができます。

  5. ボットは、 GraphConnection の接続名を持つ OAuthCard を作成し、このカードを使用してサインインを求めるユーザーに応答します。

  6. アクティビティは Bot Framework チャネル サービスを通過します。Bot Framework トークン サービスを呼び出して、この要求の有効な OAuth サインイン URL を作成します。 このサインイン URL が OAuthCard に追加され、カードがユーザーに返されます。

  7. OAuthCard のサインイン ボタンをクリックすると、サインインするメッセージがユーザーに表示されます。

  8. ユーザーがサインイン ボタンをクリックすると、チャネル サービスによって Web ブラウザーが開き、外部サービスに呼び出されてサインイン ページが読み込まれます。

  9. ユーザーは、外部サービス用にこのページにサインインします。 その後、外部サービスは Bot Framework トークン サービスとの OAuth プロトコル交換を完了し、その結果、外部サービスは Bot Framework Token Service にユーザー トークンを送信します。 Bot Framework トークン サービスは、このトークンを安全に格納し、このトークンを使用してアクティビティをボットに送信します。

  10. ボットはトークンを使用してアクティビティを受け取り、それを使用して MS Graph API に対して呼び出しを行うことができます。

サインイン URL のセキュリティ保護

Bot Framework がユーザー ログインを容易にする際の重要な考慮事項は、サインイン URL をセキュリティで保護する方法です。 ユーザーにサインイン URL が表示されると、この URL は、そのボットの特定の会話 ID とユーザー ID に関連付けられます。 この URL を共有しないでください。これにより、特定のボットの会話で間違ったサインインが発生します。 共有サインイン URL を使用するセキュリティ攻撃を軽減するには、コンピューターとサインイン URL をクリックするユーザーが会話ウィンドウを 所有 しているユーザーであることを確認します。

Microsoft Teams、Direct Line、WebChat などの一部のチャネルでは、ユーザーが気付かずにこれを行うことができます。 たとえば、WebChat はセッション Cookie を使用して、サインイン フローが WebChat 会話と同じブラウザーで行われたことを確認します。 ただし、他のチャネルでは、多くの場合、ユーザーに 6 桁の マジック コードが表示されます。 これは組み込みの多要素認証に似ています。Bot Framework トークン サービスは、ユーザーが最終認証を完了しない限りボットにトークンを解放しないため、サインインしたユーザーが 6 桁のコードを入力してチャット エクスペリエンスにアクセスできる必要があることを証明します。

Von Bedeutung

これらの重要な セキュリティに関する考慮事項に留意してください。 その他の情報については、ブログ記事「 Azure AI Bot Service Authentication での WebChat の使用」を参照してください。

次のステップ

ユーザー認証について理解したので、ボットに適用する方法を見てみましょう。

こちらも参照ください