🛡️ CAP 验证码服务

基于 Cloudflare Workers 构建的现代化验证码解决方案

验证码演示

请完成下方验证码验证后点击登录

📚 API 文档

🚀 POST /api/challenge - 创建挑战

功能:创建新的验证码挑战,返回挑战数据供客户端计算

请求:

fetch('/api/challenge', { method: 'POST', headers: { 'Content-Type': 'application/json' } })

响应示例:

{ "token": "abc123...", "challenge": [ ["salt1", "target1"], ["salt2", "target2"], ... ], "expires": "2024-01-01T12:00:00.000Z", "challengeCount": 50, "challengeDifficulty": 5 }

🔍 POST /api/redeem - 提交解决方案

功能:提交验证码计算结果,验证通过后返回验证令牌

请求参数:

  • token - 挑战令牌
  • solutions - 计算结果数组
fetch('/api/redeem', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: "abc123...", solutions: [12345, 67890, ...] }) })

响应示例:

{ "success": true, "token": "verified_token_xyz", "expires": "2024-01-01T12:20:00.000Z" }

✅ POST /api/validate - 验证令牌

功能:验证已获得的令牌是否有效,用于实际业务逻辑验证

请求参数:

  • token - 验证令牌
  • keepToken - 是否保留令牌(默认false,验证后删除)
fetch('/api/validate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: "verified_token_xyz", keepToken: false }) })

响应示例:

{ "success": true }

🔧 集成示例

JavaScript 完整集成:

// 1. 创建挑战 const challenge = await fetch('/api/challenge', { method: 'POST' }); const challengeData = await challenge.json(); // 2. 使用 CAP Widget 自动处理验证 // <cap-widget onsolve="handleSolve" data-cap-api-endpoint="/api/"></cap-widget> function handleSolve(event) { const verifiedToken = event.detail.token; // 3. 在业务逻辑中验证令牌 fetch('/api/validate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: verifiedToken, keepToken: false }) }) .then(res => res.json()) .then(result => { if (result.success) { console.log('用户验证通过,可以执行业务逻辑'); } }); }

⚙️ 配置参数

  • 挑战数量:50个计算题
  • 难度级别:5(需要5个前导零)
  • 挑战过期:10分钟
  • 令牌过期:20分钟
  • 安全特性:令牌一次性使用,自动清理过期数据

🛡️ 安全特性

  • 防重放攻击:令牌验证后自动删除
  • 自动清理:过期挑战和令牌自动清理
  • SHA-256 PoW:基于工作量证明的安全验证
  • 全球分布:Cloudflare Workers 边缘计算