title: “PKCE” aliases:
- “Proof Key for Code Exchange” status: researched tags:
- “wikidig” sources:
- “https://oauth.net/2/pkce/”
- “https://wikidig.oqzl.net/”
PKCEは、OAuth 2.0の認可コードフローで認可コードの横取り・注入を防ぐ拡張機構である。
仕組み
クライアントは認可開始時にランダムなcode_verifierを生成し、そこから導出したcode_challengeを認可リクエストへ送る。認可コードをトークンへ交換するときに元のcode_verifierを提示し、認可サーバーが照合する。これにより、フローを開始したクライアントだけがコード交換を完了できる。
利用上の位置付け
PKCEはクライアント認証ではなく、クライアントシークレットの代替でもない。既存のクライアント認証と併用し、認可コードフローごとに使うことが推奨される。モバイル・ネイティブアプリ向けに設計されたが、機密クライアントを含むすべてのクライアントに有用である。
WikiDigでの利用
WikiDigの保守レイヤーでは、GitHub認可にPKCEを用いる。認可コードを取得しただけの第三者がアクセストークンへ交換するリスクを低減する。
Related concepts
- OAuth 2.0 — PKCEが適用される認可プロトコル
- 認可コードフロー — PKCEを組み合わせるOAuth 2.0のフロー
- GitHub OAuth — WikiDigの認可先