SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

【MCPサーバー開発入門】

MCPサーバーに認証・認可を導入してみよう──セキュアな公開に向けた実装手順

MCPサーバー開発入門 第3回

今回作るもの(構成)

 今回は「天気予報MCPサーバー」そのものを自作するのではなく、IaCとコードが揃った公式サンプルを使って"認証・認可の導入"に集中します。

  • デプロイ対象:Azure App Service(Webアプリ)
  • 認証基盤:Microsoft Entra ID
  • MCP endpoint:https://<your-app-service-name>.azurewebsites.net/mcp/stream

 参考:サンプル

手順1:Azure App ServiceにMCPサーバーをデプロイする

 まずはホスティングです。azdを使うと、アプリと必要なAzureリソースをまとめて作成してデプロイできます。

 azd(Azure Developer CLI)は、アプリ開発向けに「リソース作成(IaC)+デプロイ」をプロジェクト単位でまとめて扱えるCLIです。

  • azd auth loginazdがAzureに操作できるようにサインインします(すでにサインイン済みなら省略できる場合があります)
  • azd up:必要なAzureリソースを作成し、アプリをビルド・デプロイまで一括で実行します
bash
git clone git@github.com:Azure-Samples/remote-mcp-webapp-python.git
cd remote-mcp-webapp-python

azd auth login
azd up

 実行中に「環境名(environment name)」と「リージョン」を聞かれるので、任意の値を入力してください。

 デプロイが完了すると、出力にアプリのURLが表示されます。以降の手順で使うので記録しておきます。

手順2:MCP Inspectorから(認証なしで)動作確認する

 認証・認可を入れる前に、まず「サーバーが動いている」ことを確認します。

bash
npx @modelcontextprotocol/inspector

 MCP Inspector側で、以下のように設定します。

  • Transport Type:Streamable HTTP
  • URL:https://<your-app-service-name>.azurewebsites.net/mcp/stream

 <your-app-service-name>は先ほど記録した値を使ってください。

MCP Inspectorから認証なしで接続する例
MCP Inspectorから認証なしで接続する例

 注意:MCP InspectorはNode.js環境が必要です。Node.jsが無い場合は先にインストールしてください。

手順3:MCPサーバーに認証(Entra ID)を導入する

 ここからが本題です。Azure App Serviceには組み込み認証(Easy Auth)という機能があり、アプリの前段でEntra ID認証を行えます。

 この仕組みを使うと、アプリ(MCPサーバー)側でOAuth/OIDCの実装を一から書かなくても、まず「未認証アクセスをブロックする」状態を作れます。

 ここでのポイントは「何をApp Service側(Easy Auth)に任せ、何がアプリ側に残るか」を誤解しないことです。

  • Easy Auth が主にやってくれること:未認証リクエストのブロック/サインイン誘導/トークン発行元(Entra ID)とのやり取り
  • アプリ側に残ること(例):どのスコープを要求するかの設計、ログ・監査、MCPツール単位の権限分離(必要なら)など
App Serviceの「認証」ブレードから「ID プロバイダーを追加」を押下
App Serviceの「認証」ブレードから「ID プロバイダーを追加」を押下

 IDプロバイダーから「Microsoft」を選択して「追加」を押下します。

Microsoft IDプロバイダーの設定画面で必要な情報を入力し、「追加」ボタンを押下
Microsoft IDプロバイダーの設定画面で必要な情報を入力し、「追加」ボタンを押下

 これによって、MCPサーバーに対してMicrosoft Entra IDを使った認証が導入されます。

 (結果として、あなたのテナント内のEntra IDユーザーだけがサインインできる状態になります)

 参考:組み込み認証の概要

手順4:同意を作成する(詰まりポイント)

 Entra IDを使う場合、MCPクライアントがトークンを取得するまでに「同意(consent)」が必要になるケースがあります。

 特にVS Code+GitHub Copilotのようなクライアントでは、状況によって同意画面が出ず、結果としてサインインが進まないことがあります。

 この問題への対策として、以下2つの考え方があります。

  • 事前認証(pre-authorize):既知のクライアントを許可リストに入れ、同意が必要な体験を最小化する(推奨)
  • 同意を明示的に作る:開発/テストとして、ブラウザで直接サインインして同意を作っておく

 開発/テスト目的で、ブラウザーで以下にアクセスしてサインインし、同意を作成できます。

 URL:https://<your-app-service-name>.azurewebsites.net/.auth/login/aad

 無事に同意が完了すると、以下のような画面が表示されます。

ブラウザから<code>.auth/login/aad</code>にアクセスし、Entra IDにサインインして同意を作成する
ブラウザから.auth/login/aadにアクセスし、Entra IDにサインインして同意を作成する

 参考:Overview 

手順5:認可を設定し、アクセス元クライアントを制限する

 次に認可(authorization)の設定です。

 「認証」は“誰か”を識別する仕組みでしたが、「認可」はどのクライアントからのアクセスを許すかどの権限(スコープ)を与えるかを制御します。

 ここでは例として、VS Codeからのアクセスだけを許可します。

5-1.App Service側で「許可されたクライアント」を設定する

 Azureポータルの「認証」ブレードから追加したMicrosoft IDプロバイダーの編集画面を開き、「クライアント アプリケーションの要件」を「特定のクライアントアプリケーションからの要求を許可する」に変更します。

 その上で「許可されたクライアントアプリケーション」にVS CodeのクライアントIDを追加します。

  • VS Code client_id:aebc6443-996d-45c2-90f0-388ff96faa56

 注意client_idは将来変更される可能性があります。値に不安がある場合は、公式ドキュメントで「VS Code(GitHub Copilot)が使うクライアントID」を確認してください。

 参考:一般的に使用される Microsoft のファーストパーティ サービスとポータル アプリ

  • VS Code client_id(執筆時点の例):aebc6443-996d-45c2-90f0-388ff96faa56
App Service認証のMicrosoft IDプロバイダー設定の許可されたクライアントアプリケーションにVS CodeのクライアントIDを追加する
App Service認証のMicrosoft IDプロバイダー設定の許可されたクライアントアプリケーションにVS CodeのクライアントIDを追加する

 この構成は、MCP Authorization仕様でいう「pre-registration(事前登録)」の考え方に近いです。つまり、接続してよいクライアント(client_id)を“あらかじめ知っている”前提で許可します。

5-2.アプリ登録側(APIの公開)でもクライアントとスコープを許可する

 続いて、同じ画面から「APIの公開」ブレードに移動し、「+クライアントアプリケーションの追加」を押下します。

 VS CodeのクライアントID(aebc6443-996d-45c2-90f0-388ff96faa56)を追加し、「承認済みスコープ」内のapi://<アプリ ID>/user_impersonationをチェックして追加します。

アプリ登録側でVS CodeのクライアントIDを追加する
アプリ登録側でVS CodeのクライアントIDを追加する

 Tipuser_impersonationは「ユーザーとしてアプリにアクセスしてよい」ことを表す代表的なスコープです。MCPの世界では、この“スコープ”が「どの操作まで許すか」を表す基本単位になります。

次のページ
手順6:PRM(Protected Resource Metadata)を有効化する

この記事は参考になりましたか?

【MCPサーバー開発入門】連載記事一覧

もっと読む

この記事の著者

百田 涼佑(ヒャクタ リョウスケ)

 日本マイクロソフト株式会社 クラウドソリューションアーキテクト。生成AIやアプリケーション開発、開発プロセス自動化から監視・認証まで、幅広い技術支援に携わる。個人としては技術記事の執筆が好きで、関心のある技術をプロトタイピングしながら日々ナレッジを発信している。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22885 2026/02/18 08:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング