验证码演示
请完成下方验证码验证后点击登录
📚 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 边缘计算