NextAuth Secret 生成器
一键生成加密安全的 NEXTAUTH_SECRET(NextAuth.js v4)或 AUTH_SECRET(Auth.js v5)。密钥通过 Web Crypto API 在浏览器本地生成,强度与 npx auth secret 输出的 32 字节密钥一致。
使用 Web Crypto API 在浏览器本地生成,不会向任何服务器发送数据。
NEXTAUTH_SECRET / AUTH_SECRET 有什么用?
NextAuth.js 把所有需要防篡改的环节都交给这个密钥:它签名并加密会话 Cookie 里的 JWT(默认使用 A256CBC-HS512 的 JWE),签名 CSRF 令牌,还会在存储邮箱验证和 Magic Link 令牌前对其做哈希。没有它,任何人都能伪造会话 Cookie、以任意用户身份登录。
在生产环境下,NextAuth.js v4 和 Auth.js v5 都会在缺少密钥时拒绝启动。密钥必须是只有服务端知道的高熵随机值——不能是密码、项目名或任何凭记忆能敲出来的东西。推荐长度为 32 字节(256 位),也是本工具的默认值。
NEXTAUTH_SECRET 与 AUTH_SECRET:v4 → v5 的改名
NextAuth.js v4 读取 NEXTAUTH_SECRET(以及 NEXTAUTH_URL)。Auth.js v5——NextAuth 更名后的下一个大版本——改为读取 AUTH_SECRET,并且不再要求 NEXTAUTH_URL,因为它能从请求中推断出主机地址。密钥本身是同一类值,变的只是变量名。
为了向后兼容,Auth.js v5 仍会回退读取 NEXTAUTH_SECRET,所以迁移到一半的项目也能正常工作——但每个项目只保留一个名字,别让后来的人猜哪个变量才是权威。新项目直接用 AUTH_SECRET。
如何在 NextAuth.js / Auth.js 中使用
1. 按你所用版本对应的变量名,把生成的密钥写入 .env 文件:
# .env — Auth.js v5
AUTH_SECRET=your-generated-secret
# .env — NextAuth.js v4
NEXTAUTH_SECRET=your-generated-secret
NEXTAUTH_URL=http://localhost:30002. 两个版本都会自动从环境变量读取密钥。只有当你想从别处加载时才需要显式传入 secret 选项:
// auth.ts — Auth.js v5
import NextAuth from "next-auth";
export const { handlers, auth, signIn, signOut } = NextAuth({
// Auth.js reads AUTH_SECRET from the environment automatically —
// set the option only when you need to override it.
secret: process.env.AUTH_SECRET,
providers: [/* GitHub, Google, Resend ... */],
});
// pages/api/auth/[...nextauth].ts — NextAuth.js v4
// export default NextAuth({
// secret: process.env.NEXTAUTH_SECRET,
// providers: [...],
// });3. 在 Vercel 上,进入 Project Settings → Environment Variables(或使用 CLI)添加同名变量,并为 Production 和 Preview 分别使用不同的值。修改后需要重新部署——Serverless 函数的环境变量在构建时固化。
# Vercel CLI — set the secret per environment
vercel env add AUTH_SECRET production
vercel env add AUTH_SECRET preview
# NextAuth v4 projects use NEXTAUTH_SECRET instead
vercel env add NEXTAUTH_SECRET production用命令行生成 NextAuth 密钥
更喜欢终端?Auth.js CLI 和 openssl 生成的 32 字节 Base64 密钥与本页完全同类——浏览器版只是省掉了打开终端这一步:
# Auth.js CLI — writes AUTH_SECRET into .env.local
npx auth secret
# or with openssl
openssl rand -base64 32用的是别的认证库?试试 Better Auth Secret 生成器 ,或者用 通用 Auth Secret 生成器为任何其他环境变量生成密钥。
轮换 NEXTAUTH_SECRET / AUTH_SECRET
轮换密钥会让所有用旧值签名的会话 Cookie 和待处理的验证令牌立即失效——所有用户都会被登出并需要重新登录。这正是预期行为:密钥泄露或有生产权限的工程师离职后,你要的就是这个效果。
轮换步骤:生成新密钥,在所有使用过旧值的环境中更新环境变量,然后重新部署。NextAuth.js 没有新旧双密钥的过渡期,如果强制重新登录对你影响较大,请安排在低流量时段进行。
常见问题
NEXTAUTH_SECRET / AUTH_SECRET 应该多长?
至少 32 字节(256 位)随机数。这是 npx auth secret 和 openssl rand -base64 32 的生成长度,也是本工具的默认值。你看到的 44 个字符的 Base64 字符串编码的就是这 32 字节——字符数不是安全指标,底层的熵才是。
密钥应该用 Base64 还是 hex?
都可以。NextAuth.js 把密钥当作不透明字符串处理,并通过 HKDF 从中派生真正的加密密钥,所以编码方式无关紧要,只有熵才重要。Base64 是官方文档和 CLI 的惯例,因此本页默认使用 URL 安全的 Base64;如果你的平台不喜欢特殊字符,用 hex 也完全没问题。
开发、预览、生产环境能共用一个密钥吗?
不要这样做。从开发者笔记本或预览部署泄露出去的密钥,会让攻击者直接伪造生产环境的会话 Cookie。每个环境各生成一个密钥——这不花任何成本,而隔离正是它的意义所在。
NEXTAUTH_SECRET 泄露了会怎样?
拿到密钥的人可以为任意用户 ID 签发有效的会话 Cookie,完全绕过登录。请立即轮换:生成新密钥,在所有环境更新变量并重新部署,把轮换前签发的所有会话都视为已泄露。然后追查泄露源头——通常是被提交的 .env 文件或一张截图。
这个免费工具由 NEXTY.DEV —— Next.js SaaS 模板 构建和维护,模板内置用户认证、Stripe 支付和 AI 能力。