Cron Secret 生成器
一键生成加密安全的 CRON_SECRET 密钥。密钥通过 Web Crypto API 在浏览器本地生成,直接复制到环境变量即可使用。
使用 Web Crypto API 在浏览器本地生成,不会向任何服务器发送数据。
什么是 CRON_SECRET?
CRON_SECRET 是一个随机令牌,用于防止定时任务接口被未授权调用。Cron 路由本质上是普通的 HTTP 接口——如果没有密钥保护,任何发现这个 URL 的人都可以触发你的定时任务、耗尽配额甚至破坏数据。
调度器在每次 cron 请求的 Authorization 请求头中携带该密钥,接口端拒绝所有不带密钥的请求。32 字节的随机值是公认的推荐强度,与 Vercel 官方文档的建议一致。
如何在 Vercel Cron Jobs 中使用 CRON_SECRET
1. 在 Vercel 项目设置中将生成的密钥添加为 CRON_SECRET 环境变量。
2. 在 vercel.json 中声明定时任务:
{
"crons": [
{ "path": "/api/cron/daily-report", "schedule": "0 5 * * *" }
]
}3. 在路由处理器中校验 Authorization 请求头:
// app/api/cron/daily-report/route.ts
import { NextResponse } from "next/server";
export async function GET(request: Request) {
const authHeader = request.headers.get("authorization");
if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
// ... run your scheduled job here
return NextResponse.json({ ok: true });
}在 Dokploy、Coolify 等平台上使用
Dokploy、Coolify 等自托管平台不会自动注入 Authorization 请求头——需要在计划任务中用 curl 显式携带:
curl -X GET "https://your-app.com/api/cron/daily-report" \
-H "Authorization: Bearer $CRON_SECRET"常见问题
CRON_SECRET 应该多长?
推荐 32 字节(256 位)随机强度,这也是 Vercel 文档的建议和本工具的默认值。更长的密钥不会带来实际的安全提升。
在浏览器里生成 cron secret 安全吗?
安全。本工具使用 Web Crypto API(crypto.getRandomValues)提供加密级随机性,密钥完全在你的设备上生成,不会被传输到任何地方。
如何用命令行生成 CRON_SECRET?
运行 `openssl rand -hex 32` 生成 hex 密钥,或 `openssl rand -base64 32` 生成 Base64 密钥。本工具生成的密钥与之等价,无需打开终端。
每个环境需要不同的密钥吗?
需要。开发、预览、生产环境应使用各自独立的密钥。如果密钥泄露,重新生成并更新环境变量即可完成轮换,无需改动代码。
这个免费工具由 NEXTY.DEV —— Next.js SaaS 模板 构建和维护,模板内置定时任务、用户认证、支付和 AI 能力。