PKCE
Proof Key for Code Exchange。OAuth2の認可コードフローを強化し、認可コード傍受攻撃を防ぐセキュリティ拡張(RFC 7636)。
仕組み
通常のOAuth認可コードフローでは、攻撃者が認可コードを傍受するとアクセストークンを不正取得できる。PKCEはこれを防ぐ。
1. クライアントがランダムな code_verifier を生成
2. code_verifier のハッシュ(code_challenge)を認可リクエストに含める
3. 認可サーバーが認可コードを発行
4. トークン交換時に元の code_verifier を送信
5. サーバーがハッシュを検証し、一致すればトークン発行
攻撃者が認可コードを傍受しても、code_verifierを知らなければトークンを取得できない。
技術要件
- S256(SHA-256)チャレンジメソッドの使用が推奨
code_verifierは43〜128文字のランダム文字列code_challenge = BASE64URL(SHA256(code_verifier))
なぜ必要か
元々はモバイルアプリなど、client_secretを安全に保持できないパブリッククライアント向けの仕様だった。OAuth 2.1ではすべてのクライアントにPKCE使用が必須となり、MCPのHTTPベースサーバーでも必須要件とされている。