無料ツール

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 トークンの署名、メール認証やマジックリンクのトークンを保存前にハッシュ化する処理などです。これがなければ、誰でもセッション Cookie を偽造して任意のユーザーとしてログインできてしまいます。

本番環境では NextAuth.js v4 も Auth.js v5 もシークレットがないと起動を拒否します。シークレットはサーバーだけが知る高エントロピーのランダム値でなければならず、パスワードやプロジェクト名、記憶から打てるようなものは論外です。推奨サイズは 32 バイト(256 ビット)で、本ツールのデフォルトもそれです。

NEXTAUTH_SECRET と AUTH_SECRET:v4 → v5 でのリネーム

NextAuth.js v4 は NEXTAUTH_SECRET(と NEXTAUTH_URL)を読み取ります。NextAuth の次期メジャーバージョンとしてリブランドされた Auth.js v5 は代わりに AUTH_SECRET を読み取り、リクエストからホストを推測できるため NEXTAUTH_URL も不要になりました。シークレットの中身は同じ種類の値で、変わったのは変数名だけです。

後方互換のため Auth.js v5 は NEXTAUTH_SECRET にもフォールバックするので、移行途中のプロジェクトでも動き続けます。ただしプロジェクトごとに名前は一つに決め、どちらの変数が正なのかを誰も推測しなくて済むようにしてください。新規プロジェクトなら AUTH_SECRET を使いましょう。

NextAuth.js / Auth.js での使い方

1. お使いのバージョンが期待する変数名で、生成したキーを .env ファイルに追加します:

.env
# .env — Auth.js v5
AUTH_SECRET=your-generated-secret

# .env — NextAuth.js v4
NEXTAUTH_SECRET=your-generated-secret
NEXTAUTH_URL=http://localhost:3000

2. どちらのバージョンも環境変数から自動で読み込みます。別の場所から読み込みたい場合にのみ secret オプションを指定してください:

auth.ts
// 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 関数の環境変数はビルド時に焼き込まれるためです。

terminal
# 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 シークレットを生成します。ブラウザ版はターミナルを開く手間を省くだけです:

terminal
# 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 でも問題ありません。

開発・プレビュー・本番で同じシークレットを使い回せますか?

やめてください。開発者のノート PC やプレビューデプロイから漏れたシークレットで、攻撃者は本番のセッション Cookie を偽造できます。環境ごとに別々のシークレットを生成しましょう。コストはゼロで、分離こそが目的です。

NEXTAUTH_SECRET が漏洩したらどうなりますか?

シークレットを持つ者は任意のユーザー ID で有効なセッション Cookie を発行でき、ログインを完全に迂回できます。直ちにローテーションしてください:新しいキーを生成し、すべての環境で変数を更新して再デプロイし、ローテーション前に発行されたセッションはすべて侵害済みとみなします。その後、漏洩経路を確認しましょう。多くはコミットされた .env ファイルかスクリーンショットです。

この無料ツールは NEXTY.DEV — Next.js SaaS ボイラープレート が開発・保守しています。認証、Stripe 決済、AI がすべて組み込み済みです。