Verifier 留在客户端
授权 URL 只包含 challenge。原始 verifier 需要与当前登录尝试绑定,并在回调换 Token 时原样发送。
OAUTH / RFC 7636 / LOCAL ONLY
生成 code_verifier 与 S256 code_challenge,并把 client_id、回调地址、scope、state 和 nonce 组装为可检查的 OAuth 授权请求。
已载入 RFC 7636 的 S256 示例,可直接核对已知结果。
PROOF KEY
AUTHORIZATION REQUEST
授权 URL 只包含 challenge。原始 verifier 需要与当前登录尝试绑定,并在回调换 Token 时原样发送。
回调收到的 state 必须与授权前保存的随机值一致;nonce 则用于 OIDC ID Token 的重放检查,两者职责不同。
协议、主机、路径、端口和尾部斜杠都可能参与匹配。生成 URL 前先照授权服务器后台的登记值填写。
RELATED TOOLS
USE & REVIEW
客户端先生成并临时保存随机 code_verifier,再把由它派生的 code_challenge 放进授权请求。用户完成登录并拿到 authorization code 后,客户端向 Token 端点提交原始 verifier;授权服务器重新计算并与最初的 challenge 比较。授权 URL 不应包含 verifier。
新流程应选择 S256,它对 verifier 做 SHA-256 后再用无填充 Base64URL 编码,避免授权请求里直接暴露 verifier。plain 只用于授权服务器确实不支持 S256 的遗留兼容;如果服务端声明支持 S256,客户端不应静默降级。
RFC 7636 规定 code_verifier 长度为 43–128 个字符,并限制为 A-Z、a-z、0-9、-、.、_、~。工具用浏览器安全随机源和拒绝采样生成这些字符,不使用 Math.random;手动输入超长、过短或包含空格都会被拒绝。
不是。state 用来把回调绑定到当前浏览器发起的授权尝试,并抵御登录 CSRF;nonce 通常写入 OIDC 请求并在 ID Token 中返回,用于绑定和防止 Token 重放。两者都应每次随机生成、按会话保存并在回调阶段精确核对。
浏览器单页应用、桌面和移动端属于无法可靠保密的 public client,不应把 client_secret 打包进前端;PKCE 用于证明换 Token 的客户端与发起授权的是同一方。能安全保存凭据的后端 confidential client 仍应按授权服务器要求认证,PKCE 也不能替代 redirect_uri、state、issuer 等检查。
不会。随机数、SHA-256、Base64URL、URLSearchParams 和下载 JSON 都在当前浏览器完成。报告会包含 verifier,适合调试但仍属于临时凭证材料;不要发到日志、分析平台或公开工单,真实登录完成后也应及时清理。