免费工具

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 中声明定时任务:

vercel.json
{
  "crons": [
    { "path": "/api/cron/daily-report", "schedule": "0 5 * * *" }
  ]
}

3. 在路由处理器中校验 Authorization 请求头:

app/api/cron/daily-report/route.ts
// 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 显式携带:

crontab
curl -X GET "https://your-app.com/api/cron/daily-report" \
  -H "Authorization: Bearer $CRON_SECRET"

阅读 NEXTY.DEV 文档中的完整定时任务配置指南

常见问题

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 能力。