PKCE 生成器
OAuth2/OIDC code_verifier 与 code_challenge
配置
✅ SHA-256 哈希后 Base64URL 编码
推荐:64 字符(RFC 7636 要求:43-128)
💡 使用说明
什么是 PKCE?
PKCE(Proof Key for Code Exchange)是 OAuth 2.0 的安全增强扩展(RFC 7636),通过动态生成验证码来防止授权码拦截攻击。
工作流程
- 客户端生成随机 code_verifier(43-128 字符)
- 使用 SHA-256 哈希并 Base64URL 编码生成 code_challenge
- 在授权请求中发送 code_challenge 和 code_challenge_method
- 在令牌请求中发送 code_verifier 进行验证
转换方法
- S256: SHA-256 哈希 + Base64URL 编码(推荐,更安全)
- plain: Verifier 和 Challenge 相同(不推荐,仅用于无法支持 SHA-256 的环境)
应用场景
- 移动应用的 OAuth 2.0 授权
- 单页应用(SPA)的安全授权
- 无法安全存储 Client Secret 的公开客户端
- 防止授权码拦截攻击
安全提示
- 始终优先使用 S256 方法,除非环境不支持
- code_verifier 必须在每次授权请求时重新生成
- code_verifier 必须保密存储在客户端
- 推荐 verifier 长度为 64 字符以提高安全性
验证码
长度:64 字符
字符集:A-Z a-z 0-9 - . _ ~
质询码
转换方法:S256
编码:Base64URL
长度:43 字符
代码示例
授权请求示例
GET /authorize? response_type=code &client_id=YOUR_CLIENT_ID &redirect_uri=YOUR_REDIRECT_URI &scope=openid profile &code_challenge=Xha7p3zYxZM2sNAx3vj8p2E12IPiR5R9oBwdLoafdRo &code_challenge_method=S256
令牌请求示例
POST /token Content-Type: application/x-www-form-urlencoded grant_type=authorization_code &code=AUTHORIZATION_CODE &redirect_uri=YOUR_REDIRECT_URI &client_id=YOUR_CLIENT_ID &code_verifier=K68ToLf5oeGIQ~vEks81N7OxwbjOU1RYZpkDfYprwRMnxaMwHLkcUOdjL~i4oIV2