SHOEISHA iD

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

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

【MCPサーバー開発入門】

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

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

 本連載では、MCP(Model Context Protocol)を使ってLLMと外部ツールを統合する方法を解説します。MCPは、LLMと外部システムをつなぐためのオープン標準であり、開発者にとっては組み合わせ爆発の解消やプラグアンドプレイ型の拡張性を提供するものです。MCPを利用することで、LLMアプリケーションの開発・運用が大幅に効率化することが期待されています。

 これまでのおさらい

はじめに

 第1回ではMCPの全体像(Host/Client/Serverといった役割や、なぜMCPが必要なのか)を押さえました。第2回ではMCP Python SDKを使って天気予報MCPサーバーを実装し、MCP InspectorやVS CodeのGitHub Copilotからツールを呼び出すところまで動作確認しました。

 今回は、いよいよ「インターネット上で動くMCPサーバー」を作り、さらに認証(authentication)認可(authorization)を導入します。

 本記事では、ホスティング先としてAzureを使い、認証基盤としてMicrosoft Entra IDを利用します。ただし本記事は「Azure特有のやり方を“正解”として押し付ける」ことが目的ではありません。

  • Anthropicが公開しているMCPのAuthorization仕様(OAuth2.1をベース)を "軸" として理解する
  • その具体的な実装例として、多くの企業で使われているMicrosoft Entra IDを使う
  • ホスティング先として、Entra IDと親和性が高いAzure App Serviceを使う

 上記の立て付けで進めます。

 参考:Authorization

対象読者

  • MCPの基本概念(第1回の内容)と、MCPサーバー開発(第2回の内容)を一通り触った方
  • 「社内向け/個人検証向けにMCPサーバーを公開したい」方
  • OAuth/OpenID Connectを名前だけでも聞いたことがある方(詳細は本記事内で必要最小限を説明します)

前提条件

Azureアカウント/権限

  • Azureサブスクリプションを1つ持っていること
  • Microsoft Entra IDテナント(通常はAzureとセット)を持っていること
  • 少なくとも以下が可能な権限があること
    • Azureリソースを作成できる
    • アプリケーション登録を作成できる(組織ポリシーで制限されている場合は管理者に依頼)

 注意:組織テナントでは「管理者の同意(admin consent)」が必要な設定になっている場合があります。その場合、後述の "同意の作成" で詰まるので、テナント管理者に協力を依頼してください。

ローカル環境

コストについて

 本記事ではAzureにリソースを作成します。検証が終わったら削除(後片付け)まで行うことを推奨します(手順は最後に記載します)。

まず押さえる:MCPにおける「認証」と「認可」

 後半はAzureの手順が中心ですが、ここで一度“概念”を揃えておくと混乱しにくくなります。

認証(authentication)と認可(authorization)の違い

  • 認証(authn):「あなたは誰ですか?」を確認すること(サインイン)
  • 認可(authz):「あなたは何をして良いですか?」を制御すること(どのクライアント/どの権限でMCPサーバーにアクセスできるか)

用語ミニ辞書(最小限)

 AS/Resource Serverなどの「役割」は次の節で整理します。ここでは後段で頻出する用語だけ押さえます。

  • scope(スコープ):何を許可するかの粒度(例:user_impersonation
  • resourceパラメータ:トークンを「どのリソース向けか」に束縛するための指定(RFC 8707)
  • client_id:OAuthクライアント(例:VS Code)の識別子。許可リスト(許可されたクライアント)に使える
  • consent(同意):クライアントが特定のスコープでアクセスすることを、ユーザー(または管理者)が許可すること
  • pre-registration(事前登録):あらかじめ“許可するクライアント”を登録しておく運用(許可リスト方式)
  • DCR(Dynamic Client Registration):OAuthのクライアント登録を動的に行う仕組み(必須ではない)
  • PRM(Protected Resource Metadata):MCPサーバーの認証要件やAS などを、クライアントが発見するためのメタデータ
  • PKCE:認可コードフローでの盗聴/すり替え対策(クライアントが必ず使う)

MCP Authorization仕様が前提にする役割

 Anthropicの仕様では、HTTP transportのMCPをOAuth2.1に当てはめて整理します。

  • MCP server(保護されたMCPサーバー):OAuth2.1のResource Serverとして振る舞う
  • MCP client(例: VS Code/GitHub Copilot):OAuth2.1のClientとして振る舞う
  • Authorization Server(AS):ユーザーと対話してトークンを発行する(例:Entra ID)

仕様上の重要ポイント(今回のハンズオンに直結するもの)

 仕様の全てを追う必要はありませんが、次の点は“この記事の手順がなぜ必要か”に直結します。

  • Protected Resource Metadata(PRM)は必須(MUST)
    • MCPクライアントは、MCPサーバーが「どのAuthorization Serverを使うのか」をPRMから発見することが必須です。
    • PRMのwell-knownは/.well-known/oauth-protected-resourceです。
  • PKCEは必須(MUST)
    • 認可コードフローでの盗聴/すり替え対策として、クライアントはPKCEを必ず使う必要があります。
  • resourceパラメータ(RFC 8707)は必須(MUST)
    • トークンを「このMCPサーバー専用」に束縛するために、クライアントはresourceを認可リクエストとトークンリクエストの両方に含める必要があります。
  • Dynamic Client Registration(DCR)は任意(MAY)
    • DCRは必須ではありません。代わりにpre-registration(事前登録)や、Client ID Metadata Documents(CIMD)が想定されます。

 参考:Authorization

次のページ
今回作るもの(構成)

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング