Agent 365 のエージェント ID では、エージェント自律アプリの OAuth フロー – アプリ専用プロトコル がサポートされています。
このフローはエージェントでエージェント ID を使用した認証フローで利用されるという理解でいます。
利用されるケースとしては、独自に開発したエージェントに Agent 365 のエージェント ID の機能を Agent 365 SDK を用いて追加、Microsoft Foundry のエージェントに追加した ツールの認証 などで使用されることがあるのではないでしょうか。
トークンの取得フローとしては冒頭のドキュメントの次の流れとなります。

エージェントから外部リソースにアクセスする際の資格情報ですが、次のようなパターンがあります。
- エージェント ID
- On-Behalf-Of (OBO)
- エージェント ユーザー
エージェント ユーザーを使用しなくても、エージェント ID のトークンを利用したフローにより、エージェントに割り当てられている資格情報でリソースにアクセスすることが可能となります。
このフローは、既存のエージェントに Agent 365 のエージェント ID による管理機能を追加する際にも使用されるものとなるのではないでしょうか。
Microsoft Foundry からエージェント ID で通信した場合に、上記のフローとなることは把握していたのですが、Foundry のエージェントからの通信で、エージェント ID を指定した場合に、実際にどのようなトークンが取得されているのかを確認したことがありませんでした。
そこで、本投稿では Dev Tunnel を使用してトークンを確認してみたという内容となります。
Foundry には、開発中のエージェント向けの 共有プロジェクト ID という概念もありますが、今回は、共有プロジェクト ID ではなく、発行済みのエージェントであり、エージェント ID を使用して確認をしています。
Dev Tunnel を使用したトークンの確認
Dev Tunnel を使用した構成
今回は Dev Tunnel を使用して、トークンの確認を実施していますが、構成としては次のような構成をとっています。
Foundry Agent Service
↓ HTTPS / MCP
Dev Tunnels Relay Service
↓ トンネル接続
ローカル devtunnel CLI
↓ HTTP localhost:7071
Azure Functions Core Tools
↓ MCP Extension
MCP Tool Function
Foundry のエージェントからのアクセス先には、Dev Tunnel により疎通を可能として URL を指定しています。
Dev Tunnel 経由でアクセスされる MCP サーバーについては、Azure Functions Core Tools を使用して、ローカルで起動した Functions を使用しています。
この Functions 内では、Bearer トークンを使用して、アクセス可能な Azure のリソースグループを取得するというような処理が実行されています。
取得したトークンでアクセス可能なリソースグループの一覧の取得になるため、エージェント ID で処理ができていれば、Foundry のエージェントのエージェント ID が IAM に設定されているリソースグループのみが取得されるという動作となります。
MCP / A2A 利用時の認証方式
Foundry のエージェントでは、MCP や A2A にによるアクセスを行う際の認証方式として「Microsoft Entra」を選択した場合、種類として「エージェント ID」を指定することができ、この設定の場合、エージェント ID のトークンが連携されることになります。
エージェント ユーザーのような、エージェントに対してユーザーが割り当てられる方式を使用しなくても、エージェント ID を使用したアクセス方法が提供されているというのがポイントではないでしょうか。
MCP から Dev Tunnel へのアクセス
MCP には任意のリモートエンドポイントを設定することができますので、次のように Dev Tunnel の URL をエンドポイントとして設定することができます。
今回は、「devtunnel host -p 7071 –allow-anonymous」で起動しており、起動後の URL をエンドポイントとして指定しています。
Dev Tunnel で接続している TCP 7071 については、ローカルで Functions Core Tools を実行して MCP Server を起動しており、処理の内容としては連携されたトークンを使用して、アクセス可能なリソースグループの一覧を取得するような処理を Vibe Coding で実装しており、Foundry からツールが呼び出されると、Dev Tunnel を経由して、ローカルで実行されている Functions Core Tools の関数が呼び出されます。
これにより、Foundry のエージェントから次のようなプロンプトを実行すると、ツール呼び出しが行われます。
トークンの確認
Dev Tunnel には Network Inspect の機能がありますので、この URL にアクセスをすることで、MCP アクセス時のヘッダー情報を確認できます。
この認証の Bearer トークンを jwt.ms 等でデコードすると、次のようなトークンでアクセスされていることが確認できます。
appid 等の ID の情報がエージェント ID となっていることが確認できますね。
エージェント ID のトークンを利用して Azure Resource Manager (management.azure.com) にアクセスをしていますので、取得される情報はエージェント ID から参照可能な情報に制限されることになります。
エージェント ID を使用して取得されたトークンがどのような内容になっているかはこのような方法で確認ができるのではないでしょうか。