Skip to main content

AI を使って Auth0 を統合する

Claude Code、Cursor、GitHub Copilot などの AI コーディングアシスタントを使えば、agent skills を利用して数分で Auth0 認証を自動的に追加できます。インストール:
次に、AI アシスタントに次のように依頼します:
AI アシスタントが自動的に Auth0 アプリケーションを作成し、資格情報を取得し、@auth0/nextjs-auth0 をインストールし、API ルートを作成して、環境変数を設定します。agent skills の完全なドキュメント →
前提条件: 始める前に、次のものがインストールされていることを確認してください。
  • Node.js 20 LTS 以降
  • npm 10 以上、または yarn 1.22 以上、または pnpm 8 以上
インストールの確認: node --version && npm --version

はじめに

この Quickstart では、Next.js 16 アプリケーションに Auth0 の認証を追加する方法を紹介します。Auth0 Next.js SDK を使って、サーバーサイドレンダリング、安全なログイン機能、保護されたルートを備えたフルスタックのウェブアプリケーションを構築します。
1

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

このQuickstart向けに新しいNext.jsプロジェクトを作成します
プロジェクトを開く
2

Auth0 Next.js SDK のインストール

shellscript npm install @auth0/nextjs-auth0
3

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

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

Auth0 App をセットアップする

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

Auth0の設定を作成する

Auth0のクライアントコードをsrc/lib/auth0.tsに追加します:
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、Logout、Profile コンポーネントを作成

Step 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アプリのコールバックURLを http://localhost:3001 に更新してください
確認これで、localhost 上で Auth0 のログインページが正常に動作するようになっているはずです

トラブルシューティング

JWEDecryptionFailed: decryption operation failed エラーが表示される場合は、AUTH0_SECRET が無効であるか、別のシークレットで暗号化された古いセッションクッキーが原因です。解決方法:
  1. 次のコマンドで新しいシークレットを生成します。
  1. .env.local ファイルを更新します。
  1. localhost:3000ブラウザクッキーを削除します。
    • Chrome/Edge: F12 キーを押す → Application タブ → Cookies → localhost のクッキーをすべて削除
    • Firefox: F12 キーを押す → Storage タブ → Cookies → localhost のクッキーをすべて削除
    • Safari: Develop メニュー → Show Web Inspector → Storage タブ → Cookies → すべて削除
  2. 開発サーバーを再起動します。
シークレットは必ず 32 バイト (16 進数 64 文字) ちょうどである必要があります。このエラーは、アプリが別のシークレットで暗号化された既存のセッションクッキーを復号しようとしたときに発生します。
ログインをクリックすると 404 ページが表示される場合は、次のよくある原因を確認してください。
  1. プロキシの場所: src/proxy.ts が正しい場所にあることを確認します
  2. プロキシのコード: プロキシがステップ 6 のコードと一致していることを確認します
  3. サーバーの再起動: プロキシファイルを作成したら、開発サーバーを再起動します
  4. インポートの確認: 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. インポートの確認: @/components/* を使用していることを確認します (~/components/* ではありません)

高度な使い方

この Quickstart では 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. Step 6 に示されている matcher パターンでプロキシが正しく設定されていること
  3. プロキシファイルの作成後に開発サーバーを再起動していること
Auth0 Next.js SDK v4 は、App Router と Pages Router の両方のパターンをサポートしています。以下は、一般的なサーバーサイドパターンの例です。
app/protected/page.tsx
クライアントサイドの認証 state には、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 ドメイン と audience が必要です。バックエンドの設定では、次のようにします。
convex/auth.config.ts
バックエンドで必要な場合は、Auth0 アプリケーションに API audience が設定されていることを確認してください。これは Auth0 Dashboard の アプリケーション → APIs で設定するか、.env.localAUTH0_AUDIENCE を追加し、それに合わせて SDK を設定できます。

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

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