AZ Tools

OAuth 2.0 PKCE 生成器

网络

PKCE(Proof Key for Code Exchange,RFC 7636)是推荐用于所有公开客户端 — SPA、移动应用、无法安全保存 client_secret 的桌面应用 — 的现代 OAuth 2.0 流程。本工具生成密码学随机的 `code_verifier`(unreserved URI 字符集 43-128 字符),派生 `code_challenge`(S256 使用 SHA-256 的 base64url 编码,plain 直接用 verifier),并构建包含 CSRF 防护 `state` 的完整 authorization URL。附带的 `curl` 示例展示令牌交换步骤,所有参数已就位 — 只需粘贴回调返回的 `code`。

使用方法

  1. 设置 verifier 长度(默认 64,最小 43,最大 128)。
  2. 选择 S256(始终推荐)或 plain(仅用于旧服务器)。
  3. 填写 `client_id`、`redirect_uri`、`scope` 和 OAuth 端点。
  4. 将用户引导至 authorization URL。回调返回 `?code=...` 后,运行 curl 用该 code 换取令牌。

常见问题

S256 vs plain,该用哪个?
始终用 S256。plain 直接将 verifier 作为 challenge 发送,authorization 请求若被拦截就毫无保护。S256 只发送 verifier 的 SHA-256,verifier 本身在步骤 1 不出现,大大增加了拦截攻击难度。RFC 7636 规定支持 S256 时客户端应拒绝 plain。
为什么 verifier 用这些字符?
RFC 7636 规定 verifier 字母表为 `[A-Z][a-z][0-9]-._~` — 来自 RFC 3986 的 URI 未保留字符。这使其在 URL、头部、表单体中均可安全使用,无需转义。
`state` 是做什么的?
客户端按请求生成、在回调中验证的不透明随机字符串。防 CSRF:若攻击者诱使用户点击恶意 authorization 重定向,`state` 与应用记录的不匹配,响应会被拒绝。务必使用。
在哪里运行?
完全在浏览器中。Verifier 来自 `crypto.getRandomValues()`,SHA-256 来自 `crypto.subtle.digest()` — 都是 Web Crypto API。不会传输任何数据。

相关工具