ユーザー認証

この記事の対象: 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 接続は、ユーザーのサインインとユーザー トークンの取得を楽にするためにボットのコード内で使用されます。

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

Diagram illustrating the relationship between authentication components in Azure AI Bot Service.

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

Bot Framework トークン サービスの役割は次のとおりです。

  • 幅広い外部サービスとの OAuth プロトコルの使用を容易にすること。
  • 特定のボット、チャネル、会話、ユーザーのトークンを安全に格納すること。
  • ユーザー トークンを取得すること。

    ヒント

    ボットのユーザー トークンが期限切れになっている場合は、ボットが次のことを行います。

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

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

  1. Microsoft Entra ID アプリケーション (ID プロバイダー) を、Azure Portal を使用して Bot Framework トークン サービスに登録します。
  2. ボットの OAuth 接続を (たとえば GraphConnection という名前で) 構成します。

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

Sequence diagram outlining the steps for a bot to send an email on behalf of a user.

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

  2. このメッセージが含まれたアクティビティがユーザーから Bot Framework チャネル サービスに送信されます。 アクティビティ内の userid フィールドが設定されていることがチャネル サービスによって確認され、メッセージがボットに送信されます。

    Note

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

  3. ボットは Bot Framework トークン サービスに要求を実行し、OAuth 接続 GraphConnection のユーザー ID のトークンが既にあるかどうかを問い合わせます。

  4. このユーザーがボットを操作したのはこれが初めてであるため、Bot Framework トークン サービスにはまだこのユーザー用のトークンがありません。NotFound が結果としてボットに返されます。

    Note

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

  5. ボットによって、GraphConnection という接続名が含まれた OAuthCard が作成され、このカードを使用してサインインするようユーザーに要求する応答が返されます。

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

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

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

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

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

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

Bot Framework でユーザー ログインを容易にする際に重要な考慮事項は、サインイン URL をセキュリティ保護する方法です。 ユーザーにサインイン URL が表示されるとき、その URL は、そのボットの特定の会話 ID とユーザー ID に関連付けられています。 この URL は共有しないでください - 特定のボットの会話で不適切なログインが行われる原因となるためです。 ログイン URL の共有によるセキュリティ攻撃を軽減するには、マシンとログイン URL をクリックする人物が会話ウィンドウを「所有」していることを保証する必要があります。

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

重要

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

次のステップ

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

関連項目