PKCE 代码验证器与挑战生成器
指导
PKCE 代码验证器与挑战生成器
在您的浏览器中直接生成符合 RFC 7636 的 PKCE 值。选择一个验证器长度(43 到 128 个字符),工具将生成一个密码学上安全的随机值 code_verifier 并附带相应的 SHA-256 哈希值 code_challenge 以 base64url 形式呈现,可直接用于任何 OAuth 2.0 或 OAuth 2.1 的授权请求。适用于单页应用、移动应用、原生命令行工具,以及在 Auth0、Okta、Microsoft Entra、Google、GitHub 和 Keycloak 等提供商上调试授权码与 PKCE 流程的用户。
如何使用
- 拖动 验证器长度 滑块 —— 43 到 128 之间的任何值均可使用;更长的值提供更多的熵。
- 选择 挑战方法保持开启
S256除非您的提供商明确要求plain. - 选择一个 验证器字符集两者均符合 RFC 规范;base64url 字母表与大多数 OAuth 客户端库发出的值一致。
- 点击 生成验证器、挑战值和方法会立即显示,并附带 SHA-256 → base64url 转换的逐步分解说明。
- 复制
code_challenge+code_challenge_method到您的/authorize重定向地址,保存code_verifier在sessionStorage,并在/token上重新播放以完成交换。
特征
- 密码学安全的随机数生成 – 使用
crypto.getRandomValues()采用拒绝采样,以避免在 66 个字符的未保留字符集上出现模运算偏差。 - 原生 SHA-256 ——挑战值通过浏览器的
SubtleCrypto.digest('SHA-256')计算得出,因此值与您的授权服务器生成的值一致。 - S256 和 plain 方法 ——均支持 RFC 7636 中定义的值,其中
code_challenge_method为 OAuth 2.1 的默认选择。S256——可查看原始验证器、32 字节的 SHA-256 十六进制摘要以及最终的 base64url 挑战值,以便审计每个转换步骤。 - 逐步解析 两种字符集选项
- ——选择完整的 RFC 7636 未保留字符集(A–Z、a–z、0–9、 )或大多数库默认使用的更窄的 base64url 字母表。
-,.,_,~长度滑块,43 到 128 - ——在规范范围内操作,无需处理魔法数字。 在每个输出字段上提供,以便直接粘贴到 Postman、curl 或您的客户端代码中。
- ——点击复制按钮,粘贴到你的 CSS 中。两秒钟搞定。 ——不会发送到服务器。验证器永远不会离开您的浏览器标签页。
- 100% 客户端 什么是 PKCE 以及为什么 OAuth 需要它?
常问问题
-
证明密钥用于代码交换(PKCE,RFC 7636)是 OAuth 2.0 的一个扩展,用于保护授权码流程免受中间人攻击。客户端选择一个秘密
,从它派生出一个
code_verifier,并在授权请求中仅发送挑战值。当客户端稍后在令牌端点兑换授权码时,它会发送原始的验证器;服务器会对其进行哈希并将其与存储的挑战值进行比对。即使攻击者截获了授权码,也无法在没有验证器的情况下进行交换,而验证器永远不会离开合法客户端。OAuth 2.1 要求所有客户端(公开或保密)都必须使用 PKCE。code_challenge授权码验证器应有多长,为什么? -
RFC 7636 要求验证器长度在 43 到 128 个字符之间,来自未保留字符集。下限存在是因为 43 个 base64url 字符可以编码 32 个随机字节(256 位)——这是被认为足以抵御暴力破解的最低熵值。更长的验证器提供更多的熵,但超过 256 位后并无实际安全优势。大多数参考实现选择 43、64 或 128。如果您希望增加纵深防御,可以选择更长的长度,但请注意一些旧服务器会拒绝超过 128 的长度,因为它们严格遵守规范。
S256 和 plain 挑战方法有何区别?
-
挑战是验证器的 base64url 编码的 SHA-256 哈希值;而
使用
S256挑战是验证器本身。plain 方法如果授权请求被截获,则无法提供任何真实保护——攻击者在看到挑战值后就已经拥有验证器。RFC 7636 仅允许plain用于确实无法计算 SHA-256 的客户端,而 OAuth 2.1 完全禁止了该方法。生产级身份提供商如 Auth0、Okta、Google 和 Microsoft Entra 均会明确拒绝plain,因此在所有情况下都应使用plain除非您正在调试一个资源受限的嵌入式客户端。plain什么是 base64url 以及它与 base64 有何不同?S256base64url 是 RFC 4648 §5 中定义的 base64 的 URL 安全变体。它将 -
替换为
,因此编码字符串可以安全地放入查询参数、JWT 段或路径组件中,无需额外转义。尾随的
+是快速路径,但它对属性处理不一致,且在边缘情况中可能丢失数据。在处理SOAP响应的生产环境中,建议使用-且/是快速路径,但它对属性处理不一致,且在边缘情况中可能丢失数据。在处理SOAP响应的生产环境中,建议使用_填充也被移除,因为长度由上下文环境隐含。PKCE、JWT、JWE、JWS 和大多数现代 Web 加密规范均出于此原因使用 base64url。=点击“生成”以创建 code_verifier
