PKCE 生成器
OAuth 2.0 PKCE(RFC 7636)code_verifier 与 code_challenge 生成工具,密码学安全随机数本地生成,用于防止授权码拦截攻击。
免费在线工具
Loading…
使用说明
- 选择 code_verifier 长度(43-128字符,默认64)和挑战方式(推荐S256,也可选plain)
- 点击「生成」按钮,工具用浏览器 crypto.getRandomValues 在本地生成密码学安全的随机 code_verifier,并自动计算对应的 code_challenge
- 查看下方「怎么用」说明:先在授权请求URL中带上 code_challenge 和 code_challenge_method=S256,用户完成登录后,在换取token的请求中带上原始 code_verifier
- 点击「生成示例」可重新生成一对新的随机值,每次点击结果都不同
功能介绍
- code_verifier 使用 crypto.getRandomValues 生成密码学安全随机数,字符集严格符合RFC 7636规定的unreserved字符集(A-Z a-z 0-9 - . _ ~),长度可在43-128字符间调整
- code_challenge 计算支持两种方式:S256(对verifier做SHA-256后Base64URL编码,RFC推荐)与plain(challenge等于verifier本身)
- SHA-256计算使用浏览器原生 Web Crypto API(crypto.subtle.digest),全程本地计算不上传任何数据
- 附带PKCE在OAuth2授权码流程中的使用说明和请求参数示例,帮助理解completion整个流程
使用场景
SPA/移动端接入OAuth2授权码流程
现代单页应用和移动端App无法安全存储client_secret,PKCE是RFC推荐的标准安全实践,本工具帮助快速生成测试用的verifier/challenge对
调试OAuth2授权服务器实现
开发或联调自建的OAuth2 Provider时,需要构造符合规范的code_challenge来测试授权端点的校验逻辑是否正确
验证第三方SDK的PKCE实现是否正确
用工具生成一组已知的verifier/challenge,对照第三方SDK的计算结果,确认SHA-256+Base64URL的实现是否符合RFC 7636
学习理解PKCE安全机制
通过实际生成过程和流程说明,理解PKCE如何通过一次性挑战-验证配对防止授权码在传输过程中被截获后被冒用
常见问题
PKCE 是什么,为什么需要它?
PKCE(Proof Key for Code Exchange,RFC 7636)是OAuth 2.0授权码流程的安全增强机制。传统授权码流程中,如果授权码在传输过程中被截获,攻击者可以直接拿去换取token。PKCE要求客户端在发起授权请求时携带一个challenge,换取token时必须提供能推导出该challenge的原始verifier,即使授权码被截获,没有verifier也无法完成token交换。现已成为SPA、移动端App等无法安全保存密钥的客户端的标准实践。
S256 和 plain 两种方式该选哪个?
应始终优先使用 S256。S256会对code_verifier做SHA-256哈希后再编码,即使攻击者截获了授权请求中的code_challenge,也无法逆向推出verifier;plain方式下challenge就是verifier本身,一旦授权请求被截获PKCE就完全失去保护作用。RFC 7636明确推荐所有客户端优先支持S256,仅在无法计算SHA-256的极端受限环境才考虑plain。
为什么必须用 crypto.getRandomValues 而不是 Math.random?
Math.random() 不是密码学安全的随机数生成器,其内部算法在很多JS引擎中是可预测的,攻击者有可能根据历史输出推测后续值。code_verifier作为PKCE安全性的根基,必须使用浏览器提供的 crypto.getRandomValues(基于操作系统级的密码学安全随机数源)来生成,这也是RFC 7636对实现的隐含要求。
生成的 code_verifier 和 code_challenge 会被上传或保存吗?
不会。所有随机数生成和SHA-256计算都通过浏览器原生Web Crypto API在本地完成,本工具不会将生成结果发送到任何服务器,也不做任何形式的持久化存储,刷新页面后结果即清空。