メインコンテンツへスキップ

AI を使って Auth0 を統合する

Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントを使用している場合は、agent skills を使って数分で Auth0 認証を自動的に追加できます。インストール:
続けて、AI アシスタントに次のように依頼します:
AI アシスタントは、Auth0 アプリケーションの作成、認証情報の取得、@auth0/nextjs-auth0 のインストール、API ルートの作成、環境変数の設定を自動的に行います。agent skills の詳細なドキュメント →
前提条件: 開始する前に、以下がインストールされていることを確認してください。インストールを確認するには: node --version && npm --version

はじめに

このクイックスタートでは、Next.js 16 アプリケーションに Auth0 認証を追加する方法を説明します。Auth0 Next.js SDK を使用して、サーバーサイドレンダリング、セキュアなログイン機能、保護されたルートを備えたフルスタック Web アプリケーションを構築します。
1

新しいプロジェクトを作成

このQuickstart用の新しいNext.jsプロジェクトを作成する
プロジェクトを開く
2

Auth0 Next.js SDKをインストールする

shellscript npm install @auth0/nextjs-auth0
3

プロジェクトファイルを作成

Auth0 統合に必要なディレクトリとファイルをすべて作成します。
4

Auth0 アプリを設定する

次に、Auth0テナントで新しいアプリを作成し、プロジェクトに環境変数を追加します。Auth0アプリをセットアップするには、次の3つの方法があります。Quick Setupツールを使用する (推奨) 、CLIコマンドを実行する、またはDashboardから手動で設定する方法です。
Auth0アプリを作成し、適切な設定値があらかじめ入力された .env ファイルをコピーします。
5

Auth0 の設定を作成する

src/lib/auth0.ts に Auth0 クライアントのコードを追加します:
src/lib/auth0.ts
6

プロキシを追加

プロキシコードを src/proxy.ts に追加します:
src/proxy.ts
src/ ディレクトリを使用しているため、proxy.ts ファイルは src/ 内に作成されます。src/ ディレクトリを使用していない場合は、代わりにプロジェクトルートに作成してください。
このプロキシは、次の認証ルートを自動的にマウントします。
  • /auth/login - ログイン ルート
  • /auth/logout - ログアウト ルート
  • /auth/callback - コールバック ルート
  • /auth/profile - ユーザープロフィール ルート
  • /auth/access-token - アクセストークン ルート
  • /auth/backchannel-logout - バックチャネルログアウト ルート
7

Login、ログアウト、ユーザープロファイル用のコンポーネントを作成

ステップ 3 で作成したファイルに、次のコンポーネントコードを追加します。
8

メインページを更新

src/app/page.tsx を以下の内容に置き換えます:
src/app/page.tsx
9

Auth0Provider を使用してレイアウトを更新する

src/app/layout.tsx を更新して Inter フォントを読み込み、アプリを Auth0Provider で囲みます。
src/app/layout.tsx
v4 では、Auth0Provider は省略可能です。必要なのは、サーバー レンダリング時に初期ユーザーを渡し、それを useUser() フックで利用できるようにする場合だけです。
10

Tailwind CSS を設定する

src/app/globals.css の内容を次の内容に置き換えます。
src/app/globals.css
11

アプリを実行する

アプリは http://localhost:3000 で利用できます。Auth0 SDK v4 は、認証ルートを /auth/* に自動的にマウントします (v3 の /api/auth/* ではありません) 。ポート 3000 が使用中の場合は、npm run dev -- --port 3001 を実行し、Auth0 アプリの callback URL を http://localhost:3001 に更新してください。
チェックポイントこれで、Auth0 のログインページが localhost 上で正常に動作しているはずです

トラブルシューティング

JWEDecryptionFailed: decryption operation failed エラーが表示される場合は、AUTH0_SECRET が無効であるか、別のシークレットで暗号化された古いセッションクッキーが原因です。解決策:
  1. 次のコマンドで新しいシークレットを生成します:
  1. .env.local ファイルを更新します:
  1. localhost:3000ブラウザ cookies を削除します:
    • Chrome/Edge: F12 キーを押す → [Application] タブ → [Cookies] → localhost の cookies をすべて削除
    • Firefox: F12 キーを押す → [Storage] タブ → [Cookies] → localhost の cookies をすべて削除
    • Safari: [Develop] メニュー → [Show Web Inspector] → [Storage] タブ → [Cookies] → すべて削除
  2. 開発サーバーを再起動します:
シークレットは必ず 32 バイト (16 進数 64 文字) である必要があります。このエラーは、アプリが別のシークレットで暗号化された既存のセッションクッキーを復号しようとしたときに発生します。
ログイン をクリックすると 404 ページが表示される場合は、次の一般的な問題を確認してください:
  1. プロキシの配置場所: src/proxy.ts が正しい場所にあることを確認します
  2. プロキシコード: プロキシが手順 6 のコードと一致していることを確認します
  3. サーバーの再起動: プロキシファイルを作成した後、開発サーバーを再起動します
  4. import の確認: import { auth0 } from "./lib/auth0" のパスが正しいことを確認します
“Cannot find module ’@/components/LoginButton’” のようなエラーが表示される場合:
  1. ファイルの存在確認: 手順 3 のファイルがすべて作成されていることを確認します
  2. パスの確認: コンポーネントが src/components/ ディレクトリにあることを確認します
  3. TypeScript の再起動: Cmd+Shift+P (Mac) または Ctrl+Shift+P (Windows) を押して、“TypeScript: Restart TS Server” を実行します
  4. import の確認: @/components/* を使用していることを確認します (~/components/* ではありません)

高度な使い方

このクイックスタートでは Auth0 Next.js SDK v4 を使用します。v3 から大きな変更があります。
  • 動的ルートハンドラーは不要 - 認証ルートはプロキシによって自動的にマウントされます
  • クライアント設定の簡素化 - new Auth0Client() は環境変数を自動的に読み込みます
  • 新しいルートパス - ルートは /api/auth/* ではなく /auth/* に配置されます
  • プロキシが必須 - すべての認証機能は proxy.ts 経由で動作します
  • <a> タグを使用 - ナビゲーションには、onClick を使うボタンではなく <a href="/auth/login"> を使用する必要があります

認証ルート

SDK は、プロキシ経由で以下のルートを自動的にマウントします。
これらのルートで 404 エラーが発生する場合は、次の点を確認してください。
  1. proxy.ts ファイルが正しい場所にあること (プロジェクトルート、または src/ ディレクトリを使用している場合は src/ 内)
  2. 手順 6 に記載の matcher パターンでプロキシが正しく設定されていること
  3. プロキシファイルの作成後に開発サーバーを再起動していること
Auth0 Next.js SDK v4 は、App Router と Pages Router の両方のパターンをサポートしています。以下は、一般的なサーバーサイドパターンの例です。
app/protected/page.tsx
クライアントサイドで認証状態を扱うには、useUser フックを使用します。
components/UserProfile.tsx
API ルートを保護するには、withApiAuthRequired メソッドを使用します。
app/api/protected/route.ts
Auth0 の認証トークンを必要とするサードパーティのバックエンドサービス (Convex、Supabase、Firebase など) を使用している場合は、Next.js アプリからバックエンドクライアントにアクセストークンを渡す必要があります。

アクセストークンの取得

サーバーサイド (App Router) :
app/api/token/route.ts
クライアントサイド:
lib/convex-client.ts

バックエンドの設定

ほとんどのサードパーティサービスでは、トークンを検証するために Auth0 のドメインとオーディエンスが必要です。バックエンドの設定では、次のように指定します。
convex/auth.config.ts
バックエンドで必要になる場合は、Auth0 アプリケーションに API オーディエンスが設定されていることを確認してください。これは Auth0 Dashboard の Applications → APIs で設定するか、.env.localAUTH0_AUDIENCE を追加し、それに応じて SDK を設定することで対応できます。

トークンに関する問題のトラブルシューティング

バックエンドで ctx.auth.getUserIdentity()null を返す場合:
  1. トークンが渡されていることを確認する: ブラウザーの DevTools の Network タブで、リクエストにトークンが含まれていることを確認します
  2. トークン形式を確認する: idToken ではなく accessToken を渡していることを確認します
  3. バックエンド設定を確認する: バックエンドに正しい Auth0 のドメインとクライアントIDが設定されていることを確認します
  4. オーディエンスを確認する: Auth0 API を使用している場合は、AUTH0_AUDIENCE が設定されており、API 識別子と一致していることを確認します
  5. トークンのクレームを確認する: jwt.io で JWT をデコードし、想定どおりのクレームが含まれていることを確認します