コンテンツへスキップ
NextAuth.js v4からの移行? こちらの 移行ガイドをご覧ください.
はじめにデプロイメント

デプロイメント

環境変数

💡

一貫性を保つために、すべてのAuth.js環境変数にAUTH_プレフィックスを付けることをお勧めします。これにより、自動検出が容易になり、他の環境変数と区別しやすくなります。

Auth.jsライブラリでは、AUTH_SECRET環境変数を設定する必要があります。これは、Cookieとトークンを暗号化するために使用されます。少なくとも32文字の暗号化的に安全なランダム文字列にする必要があります。

npm exec auth secret

OAuthプロバイダーを使用している場合、プロバイダーから**クライアントID**と**クライアントシークレット**が提供されます。これらを環境変数として設定する必要があります(Auth0などのOIDCプロバイダーの場合、issuer値も必要になる場合があります。プロバイダーのドキュメントを参照してください)。

Auth.jsは**環境変数の推論**をサポートしています。つまり、特定の構文に従ってプロバイダーの環境変数を命名した場合、構成でプロバイダーに明示的に渡す必要がありません。

クライアントIDとクライアントシークレットは、AUTH_[PROVIDER]_IDAUTH_[PROVIDER]_SECRETという名前になります。プロバイダーでissuerが必要な場合は、AUTH_[PROVIDER]_ISSUERという名前になります。例:

AUTH_OKTA_ID=abc
AUTH_OKTA_SECRET=abc
AUTH_OKTA_ISSUER=abc

詳細については、環境変数ページをご覧ください。

AUTH_SECRET

これは唯一必須の環境変数です。JWTのエンコードと転送中のデータの暗号化に使用されるシークレットです。前述のように、少なくとも32文字のランダム文字列を推奨します。npm exec auth secretまたはopenssl rand -base64 33を使用してCLIで生成できます。

AUTH_TRUST_HOST

リバースプロキシの背後でアプリケーションをデプロイする場合は、AUTH_TRUST_HOSTtrueに設定する必要があります。これにより、Auth.jsはリバースプロキシからのX-Forwarded-Hostヘッダーを信頼するようになります。アプリケーションがサポートされているホスティングプロバイダーのいずれかで実行されていることを示す環境変数が検出されると、Auth.jsは自動的にこれをtrueと推論します。現在、VERCELCF_PAGES(Cloudflare Pages)がサポートされています。

AUTH_URL

この環境変数は、v5ではほとんど不要です。ホストはリクエストヘッダーから推論されます。ただし、異なるベースパスを使用している場合は、この環境変数を設定することもできます。たとえば、AUTH_URL=http://localhost:3000/web/authまたはAUTH_URL=https://company.com/app1/auth

AUTH_REDIRECT_PROXY_URL

この環境変数は、高度なユースケース(たとえば、プレビューデプロイメントの際にAuth.jsをプロキシとして使用するなど)でのみ使用することを目的としています。詳細については、以下のプレビューデプロイメントの保護セクションをご覧ください。

サーバーレス

  1. 必要な環境変数を目的の環境に対して作成します。選択したプロバイダーに必要な環境変数(つまり、OAuth clientId / clientSecretなど)を追加することも忘れないでください。
  2. OAuthプロバイダーを使用する場合は、本番環境のURLのコールバックURLが正しく設定されていることを確認してください。多くのOAuthプロバイダーでは、OAuthアプリケーションごとに1つのcallbackUrlしか設定できません。その場合は、各環境(開発、本番など)に個別のアプリケーションを作成する必要があります。Googleなどの他のプロバイダーでは、1つのアプリケーションに多くのcallbackUrlを追加できます。
    • next-auth(Next.js)アプリケーションのcallbackUrlは、デフォルトで次のような形式になります。https://company.com/api/auth/callback/[provider]company.comをドメインに、providerをプロバイダー名(例:github)に置き換えます)。
    • 他のすべてのフレームワーク(@auth/sveltekit@auth/expressなど)は、デフォルトで/auth/callback/[provider]パスを使用します。
  3. デプロイ!これらの2つの前提条件を設定したら、Netlify、VercelなどでAuth.jsアプリケーションをデプロイして実行できるようになります。
⚠️

ユーザーをデータベースに保存している場合は、テストユーザーベースと本番ユーザーベースを混在させないように、開発/本番環境で異なるOAuthアプリケーションを使用することをお勧めします。

オブザーバビリティ

現在のユーザーの詳細をオブザーバビリティツールに渡すには、Auth.js が提供するコールバックを使用できます。たとえば、session コールバックでは、user.id を Sentry に渡すことができます。

auth.ts
import * as Sentry from "@sentry/browser"
import NextAuth from "next-auth"
 
export const { handlers, auth, signIn, signOut } = NextAuth({
  callbacks: {
    session({ session, user }) {
      const scope = Sentry.getCurrentScope()
 
      scope.setUser({
        id: user.id,
        email: user.email,
      })
 
      return session
    },
  },
})

セルフホスト型

Auth.js は、お好みのフレームワークをデプロイできる場所であればどこでもデプロイできます。セルフホスティングについては、フレームワークのドキュメントをご覧ください。

Docker

Docker 環境では、Auth.js の設定で trustHost: true を設定するか、AUTH_TRUST_HOST 環境変数を true に設定してください。

弊社のサンプルアプリケーションも Docker を介してホストされています こちらソースコード を参照)。以下は、Auth.js を使用する Next.js アプリケーションのサンプル Dockerfile です。

Dockerfile
# syntax=docker/dockerfile:1
# syntax=docker/dockerfile:1
FROM node:20-alpine AS base
 
# Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
 
# Install dependencies
COPY package.json pnpm-lock.yaml* ./
RUN corepack enable pnpm && pnpm i --frozen-lockfile
 
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
 
# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.dokyumento.jp/telemetry
# Uncomment the following line in case you want to disable telemetry during the build.
# ENV NEXT_TELEMETRY_DISABLED 1
 
RUN corepack enable pnpm && pnpm build
 
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
 
ENV NODE_ENV production
# Uncomment the following line in case you want to disable telemetry during runtime.
# ENV NEXT_TELEMETRY_DISABLED 1
 
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
 
COPY --from=builder /app/public ./public
 
# Set the correct permission for prerender cache
RUN mkdir .next
RUN chown nextjs:nodejs .next
 
# Automatically leverage output traces to reduce image size
# https://nextjs.dokyumento.jp/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
 
USER nextjs
 
EXPOSE 3000
 
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
 
# server.js is created by next build from the standalone output
# https://nextjs.dokyumento.jp/docs/pages/api-reference/next-config-js/output
CMD ["node", "server.js"]

プレビューデプロイのセキュリティ保護

ほとんどの OAuth プロバイダーは、複数のコールバック URL を使用したり、ワイルドカードを使用したりすることはできません。

しかし、Auth.js は **OAuth プロバイダーを使用しても、プレビューデプロイをサポート** します。これは、メインアプリケーションの動的な URL に認証リクエストをプロキシする 1 つのデプロイメントを持つという考え方です。そのため、auth.company.com のような 1 つの安定したデプロイメントがあり、そこにすべての OAuth プロバイダーの callbackUrl をポイントし、このアプリケーションは認証が成功すると、ユーザーを https://git-abc123-myapp.vercel.app のようなプレビューデプロイ URL にリダイレクトします。Auth.js を使用したプレビューデプロイのセキュリティ保護を開始するには、次の手順に従ってください。

  1. 安定したデプロイメント URL を決定します。たとえば、ビルド間で URL が変更されないデプロイメントなどです。 auth.yourdomain.com(サブドメインの使用は必須ではありません。メインサイトの URL でもかまいません)。
  2. プレビュー環境と安定環境の両方で、AUTH_REDIRECT_PROXY_URL をその安定したデプロイメント URL に設定します。Auth.js がルートを処理する場所からのパスも含めます(例:https://auth.yourdomain.com/api/auth)。
  3. OAuth プロバイダーの設定にある callbackUrl を更新して、安定したデプロイメント URL を使用します。たとえば、GitHub の場合は https://auth.yourdomain.com/api/auth/callback/github となります。

豆知識:弊社のサンプルアプリはすべてプロキシ機能を使用しています!

プレビューデプロイをサポートするには、AUTH_SECRET の値を、安定したデプロイメントと OAuth サポートが必要なデプロイメントで同じにする必要があります。

これはどのように機能しますか?

プレビューデプロイをサポートするために、Auth.js はリダイレクトプロキシサーバーとしてデプロイ間で安定したデプロイメントURLを必要とします。

AUTH_REDIRECT_PROXY_URL 環境変数が設定されている場合にのみ、OAuth コールバックリクエストをプレビューデプロイメント URL にリダイレクトします。

ユーザーがプレビューデプロイメントで OAuth サインインフローを開始すると、その URL は state クエリパラメーターに保存されますが、redirect_uri は安定したデプロイメントに設定されます。

次に、OAuth プロバイダーは上記で指定された安定した URL にユーザーをリダイレクトします。これにより、state パラメーターが検証され、state が有効な場合、ユーザーはプレビューデプロイメント URL にリダイレクトされます。これは、安定したデプロイメントとプレビューデプロイメントで同じサーバー側の AUTH_SECRET に依存することでセキュリティが確保されます。

Auth.js © Balázs Orbán and Team -2024