Proof Key for Code Exchange(RFC 7636)。認可コードを盗まれても、トークンに交換させない。
code_verifier: クライアントが毎回作る乱数。手元に隠しておく(例:dBjftJeZ4CVP-...)code_challenge: verifier の SHA-256。見られてもよい(例:E9Melhoa2Owv...)
手順 2: challenge を送る → 認可サーバーが認可コードとセットで覚える
手順 5: verifier を送る → 認可サーバーがハッシュして challenge と一致すれば発行
認可コードはブラウザを通るので盗まれうる。verifier はブラウザを通らないので盗めず、challenge からも逆算できない。だから盗んだ認可コードは使えない。