Open4

MCPと認証

diodio

Anthropic公式リファレンス
https://modelcontextprotocol.io/specification/draft/basic/authorization

Implementations using an HTTP-based transport SHOULD conform to this specification.

HTTPベースならこの仕様に従う必要がある

保護されたMCP サーバーは、アクセス トークンを使用して保護されたリソース要求を受け入れ、応答できるOAuth 2.1 リソース サーバーとして機能します。>

リソースサーバーなので、MCPサーバーは認証情報を保持するわけではない。

diodio

OAuth 2.0 Device Flow

https://qiita.com/TakahikoKawasaki/items/78eff94cef92741131f0
https://www.authlete.com/ja/developers/device_flow/

認証方法

とりえあえずChatGPTに考えてもらった方法

ブラウザをユーザーが開いて認証する

Device Flow(デバイスコード方式)

  • MCPクライアントで「認証開始」(MCPサーバーのツール)を実行し、表示された 認証URL と ユーザーコード を確認する。
  • ユーザーが任意のブラウザで 認証URL を開き、ユーザーコード を入力してログインする。
  • MCPクライアントで「認証状況の確認」を実行する(ユーザーが指示する)。結果が pending なら、数秒待って再度「認証状況の確認」を実行する。
  • 状態が approved になったら、MCPクライアント側で access_token / refresh_token を受け取り、ローカルの安全なストアに保存する。
  • 以降、API 呼び出し時に access_token を付与(期限が近づいたら refresh_token で更新)。

PKCE + 手動コード入力(OOB風)

  • MCPクライアントで「認可URLの発行」(ツール)を実行し、表示された 認可URL を確認する。
  • ユーザーが任意のブラウザで 認可URL を開き、ログインする。
  • 認可完了画面に表示される 確認コード(短い数字/文字列)をユーザーが控える。
  • MCPクライアントで「確認コードの交換」を実行し、確認コード を入力して access_token / refresh_token を受け取る。
  • 受け取ったトークンはローカルの安全なストアに保存し、以降の API 呼び出しで使用(期限管理は同様)。