跳到主要内容
ecdsa.com

PKCE(代码交换证明密钥)

RFC 7636 定义的 OAuth 扩展:客户端在授权请求中发送随机 code_verifier 的哈希,在令牌请求中发送 code_verifier 本身,因此被截获的授权码毫无用处。
其他写法PKCEProof Key for Code Exchangecode_verifiercode_challengeS256

客户端用 URL 非保留字符生成长度为 43~128 个字符的 code_verifier,在授权请求中发送 code_challenge = BASE64URL(SHA256(code_verifier)) 和 code_challenge_method=S256,之后把 code_verifier 发送到令牌端点,以证明自己持有它。plain 方法直接把 code_verifier 本身作为挑战值发送,不应使用。

PKCE 最初是为移动应用设计的,因为在移动端其他应用可能截获重定向 URI;它同样能阻止 Web 应用中的授权码注入,因此 RFC 9700 建议所有客户端都使用它,OAuth 2.1 草案则强制要求使用。对于机密客户端,它不能取代客户端身份验证;如果之前发送过挑战值,授权服务器必须拒绝缺少 code_verifier 的令牌请求。

标准与参考资料

全部术语