💡

Microsoft Bot Framework に Azure AD 認証を追加すると例外が発生する

2023/06/12に公開

Microsoft Teams のカスタム アプリではボットとタブのように複数の機能を持たせることができます。ボットはいくつかの方法で作成することができます。

  • Microsoft Bot Framework
  • Power Virtual Agents
  • Webhook とコネクタ

Microsoft Bot Framework (C#) の場合、テンプレートからプロジェクトを作成します。作成したコードは Azure Web Apps にデプロイして Azure Bot Service から呼び出すことになります。このとき、タブの機能も追加しようと思うと、タブから呼び出すカスタム API もボットのプロジェクトに一緒にしてしまうのがよさそうです。カスタム API をセキュリティで保護するために、プロジェクト構成に AddMicrosoftIdentityWebApiAuthentication に追加します。これで問題なく動作するように見えますが、ログを見るとボットの呼び出しの際に例外が発生していることがわかります。

Bearer was not authenticated. Failure message: IDX40003: Neither `tid` nor `tenantId` claim is present in the token obtained from Microsoft identity platform. 

Azure Bot Service から Azure Web Apps を呼び出すときは、Azure Bot Service の作成時に指定した Azure AD アプリケーションを使って認証が行われます。Bearer を抜き出してみると以下のような感じです。

{
  "serviceurl": "https://webchat.botframework.com/",
  "nbf": 168...,
  "exp": 168...,
  "iss": "https://api.botframework.com",
  "aud": "dd7..."
}

AddMicrosoftIdentityWebApiAuthentication の呼び出しによって tid を検証しようとしてそんな列はないということで例外が発生しています。解決するには、自前で Middleware を構成するか、Azure Web Apps をわけるようなことをする必要があります。Windows 限定ですが、仮想アプリケーションをわければ、1 つの Azure Web Apps に複数の Web アプリケーションを乗せることも不可能ではありません。ボットは動いているので、無視するというのも手ではありますが、最終手段という感じですね。

Discussion