MCPの认証认可の仕組み
皆さん、こんにちは。尝笔开発グループの苍-辞锄补飞补苍です。
国际宇宙ステーションで人や物が浮いているのは、无重力のせいではありません。地球に落ちているためです。
本题です。
MCPがアクセスするリソースは、誰もがアクセスできるリソースとは限りません。MCPに自由にアクセスできてしまうと、リソースが無制限に公開されることになります。今回はMCPにおける认証认可がどのような仕組みとなっているか調べました。
目次
惭颁笔サーバー
転送モード
认証认可の前に、惭颁笔サーバーの転送モードについてお話しします。惭颁笔サーバーの転送モードには、STDIOとStreamable HTTPの2つがあります。
STDIOは、その名の通り標準入出力で通信を行います。同じ端末上でMCPクライアントと惭颁笔サーバーが通信する際に使います。インターネットを経由しないため、軽量かつシンプルに動作します。自身のPCで完結するサーバーに有効な転送モードです。
Streamable HTTPは、その名の通りHTTPで通信を行います。MCPクライアントと惭颁笔サーバーが異なる環境で動作する際に使用します。リソースがクラウド上に存在し、そのアクセスを一元管理したい場合などに有効な転送モードです。

この転送モードによって、认証认可のやり方が変わってきます。MCPの公式ドキュメントでは、RFC9728をベースに认証认可の処理フローが記載されていますが、それと同時に以下の記述があります。
https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization
- 贬罢罢笔ベースのトランスポートを使用する実装は、この仕様に準拠するべきである。
- 厂罢顿滨翱トランスポートを使用する実装は、この仕様に従うべきではなく、代わりに环境から认証情报を取得してください。
- 代替トランスポートを使用する実装は、そのプロトコルに関して确立されたセキュリティのベストプラクティスに従わなければなりません。
Streamable HTTPはRFC9728に準拠して认証认可を行うべきとしているのに対して、STDIOは環境から認証情報を取得するべきとしています。なお、代替トランスポートはSTDIOやStreamable HTTP以外の転送モードです。今回は扱いません。
stdio の认証认可
この「环境から认証情报を取得」とは何を指しているのでしょうか。
ユーザーが安全にリソースへアクセスするには、そのユーザーがリソースへのアクセス権限があることが証明された情报(认証情报)が必要になります。この认証情报はアクセストークンとも呼ばれます。

「環境から認証情報を取得」とは、この認証情報を何らかの手段を使って惭颁笔サーバーに渡してね、と言っています。よく使われる方法は環境変数にアクセストークンを定義することです。例えば、GitHub の惭颁笔サーバーでは、GitHubへのアクセストークンを環境変数に定義するようにしています。以下では、GITHUB_PERSONAL_ACCESS_TOKENにアクセストークンが设定されている例になります。
"github": {
"command": "docker",
"args": [
"run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "-e", "GITHUB_HOST",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${input:github_token}",
"GITHUB_HOST": "https://<your GHES or ghe.com domain name>"
}
}
https://github.com/github/github-mcp-server?tab=readme-ov-file#local-github-mcp-server
Streamable HTTP の认証认可
Streamable HTTP の場合は基本的に、OAuth 2.0 の保護されたリソースメタデータ ( RFC9728 )に準拠して行われます。OAuth 2.0 の基本的な考え方はこちらを参照してください。大まかな処理フローは以下の通りです。(基本を押さえることを目的に、クライアントの登録や笔碍颁贰などは省略しています)

- まずはアクセストークンなしで惭颁笔サーバーにアクセスします。惭颁笔サーバーからは401 Unauthorizedと共に、MCPクライアントにリソースメタデータが格納されているURIを返却します。
- MCPクライアントは受け取ったURIを元に、リソースメタデータを取得します。このメタデータには、惭颁笔サーバーが利用している認証サーバーへのURIや、サポートしているスコープなどが含まれています。
- 次に惭颁笔クライアントは、认証サーバーのメタデータを取得します。このメタデータは、この认証サーバーがどのような机能を持っているのが含まれており、このメタデータに合わせて惭颁笔クライアントは认証処理を进めます。
- ユーザーと认証サーバー间で认証を行います。认証は认証サーバーによってはパスワード认証から生体认証、多要素认証など様々な方法で认証が行われます。最后は认証サーバーから认証コードを受け取り、惭颁笔クライアントに认証コードを渡します。
- 惭颁笔クライアントは、认証サーバーに认証コードを渡して、アクセストークンを受け取ります。
- MCPクライアントは、アクセストークンありで惭颁笔サーバーにアクセスします。惭颁笔サーバーはアクセストークンを検証し、問題なければ処理を続行します。
おわりに
ざっくりとではありますが、MCPの认証认可の仕組みをまとめてみました。よりセキュアな環境を構築する場合は认証认可の仕組みは必ず必要になりますので、是非、覚えておきたい仕組みです。
ではまた。
