はじめに
起きていたエラー:
Operation returned an invalid status code 'Unauthorized'
Azure Bot Service で Web Chat や Direct Line といった Bot Framework の標準チャンネルを利用したい場合、Azure AD アプリ登録をマルチテナントにする必要があるかもしれません。
この記事では、その理由と、実際に マルチテナント構成でBotリソースを作成・再構築する手順を解説します。
シングルテナントでは標準チャンネルが使えない?
Azure AD アプリ登録を「シングルテナント」にしてしまうと、BotFrameworkの Web Chat / Direct Line などの標準チャンネルでは認証連携ができなくなります。
このため、Bot Service 側で正常な通信ができず、401エラーが出たり、Web Chatが使えないなどの問題が起きます。
解決策は?
- マルチテナント(Multi-tenant)アプリとして再登録
- Bot リソースとの紐付けを再設定
- 必要に応じて、Botアプリ側の設定やデプロイ環境を更新
手順:マルチテナント構成でBotを再構築する
以下の手順に従えば、Bot Framework の標準チャンネルを活用できる構成を、一から作り直すことができます。
1. Azure AD アプリを新規作成(マルチテナント)
- Azure Portal → Azure Active Directory → App registrations → [New registration]
- Name:
chatbot-qiita
(任意の名前) -
Supported account types:
Accounts in any organizational directory and personal Microsoft accounts
を選択(マルチテナント) - Redirect URI: 空でもOK(後で不要)
- [Register] をクリック
Client Secret を作成
- [Certificates & secrets] タブ → [New client secret]
- Description:
bot-secret
(任意) - Expires: 任意期間(24か月など)
- 作成後、Value をメモ(これが
MicrosoftAppPassword
)
確認しておく値
項目 | 説明 |
---|---|
App (client) ID |
MicrosoftAppId に相当 |
Client Secret | MicrosoftAppPassword |
signInAudience |
AzureADandPersonalMicrosoftAccount であることを確認 |
2. Bot リソースを新規作成
- Azure Portal → [Create a resource] → Bot Channels Registration または Azure Bot
- Bot Handle:
chatbot-qiita
(任意) - Subscription / Resource Group / Location を指定
- 「既存の App ID / Password を使用する」を選択
- 作成した
MicrosoftAppId
/MicrosoftAppPassword
を入力
- 作成した
- [Create] で作成
作成後の確認
- OverviewやSettingsタブで App ID が正しいか確認
- Channels タブで Web Chat / Direct Line / Teams などを有効化
3. Bot アプリケーション側の設定を更新
-
.env
や環境変数に以下を設定:MicrosoftAppId=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx MicrosoftAppPassword=xxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
Azure Web App などにデプロイしている場合:
- Azure ポータルの App Service → Configuration → Application settings から設定
4. Web Chat でテスト
- Azure Portal → Bot リソース → [Test in Web Chat]
- Botと通信できるかテスト
- 返信があればOK
- エラー(401など)が出なければ成功
シングルテナントで使いたい場合は?
どうしてもシングルテナントで運用したい場合は、Bot Framework の標準チャンネルを使用しない構成にする必要があります。
たとえば:
- 自作のチャットUI(React / Vue など)+ REST API通信でBotに接続
- BotFramework SDKで
/api/messages
に直接リクエストを送る構成
おわりに
BotFramework の標準チャンネルを利用する場合、マルチテナントでのアプリ登録が前提になります。
既存リソースの設定変更が難しい場合でも、新しくリソースを作り直すことでスムーズに再構築できます。
「自社テナントのみに制限したい」場合も、マルチテナント + AADグループ制御などでカバー可能なので、要件に応じて最適な構成を選んでください。