3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Next.jsでの認証設計パターン整理【NextAuth.js / OAuth / JWT 実務ガイド】

Posted at

はじめに

受託開発やSaaS開発で認証設計は避けて通れません。むしろ「認証をどう作るか」で保守性・安全性・運用負荷が大きく左右されます。

この記事では、Next.js案件で実務によく使われる認証設計パターンを、NextAuth.js・OAuth・JWTそれぞれの視点から整理します。


想定読者

  • Next.js案件の認証設計に悩んでいる方
  • SaaS開発で安全に認証設計したい方
  • OAuth連携やセッション管理の実務Tipsが欲しい方

認証設計パターンの分類

パターン 主な用途 概要
セッションCookie型 SaaS・管理画面系 安定性重視・サーバーセッション管理
JWTトークン型 SPA・モバイルAPI 完全API駆動型・ステートレス運用
OAuth2型 外部サービス連携 Google / GitHub等の外部ログイン
NextAuth.js 上記の統合管理 Next.js案件に最適化された認証フレームワーク

1. NextAuth.jsの設計ポイント

Next.jsの認証実装で最も採用事例が増えているライブラリがNextAuth.jsです。

✅ 主な強み

  • サーバーセッション管理が標準
  • OAuthプロバイダ統合(Google, GitHub, LINE等)
  • JWT運用もサポート
  • Database連携も柔軟
  • App Router構成にも正式対応(next-auth@beta

✅ 最小構成コード例

import NextAuth from 'next-auth';
import GoogleProvider from 'next-auth/providers/google';

export const authOptions = {
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID!,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET!,
    }),
  ],
  session: { strategy: 'jwt' },
};

export default NextAuth(authOptions);

👉 SaaS案件でも中〜長期保守性が高い構成。

✅ App Router対応(最新版)

import NextAuth from 'next-auth';
import authConfig from './auth.config';

export const { handlers, auth } = NextAuth(authConfig);

2. OAuth2設計の実務ポイント

✅ 採用例

  • Googleログイン
  • LINEログイン(国内SaaSでも人気)
  • GitHub/Slack連携

✅ 注意点

  • Callback URLの管理 → 本番・開発環境で分ける
  • スコープ最小化 → 最小限の権限だけ要求する
  • 外部API変更の追従 → Provider依存管理が必要

✅ カスタムOAuth実装時の流れ

providers: [
  OAuth2Provider({
    clientId: 'xxx',
    clientSecret: 'yyy',
    authorization: 'https://provider.com/oauth2/authorize',
    token: 'https://provider.com/oauth2/token',
    userinfo: 'https://provider.com/oauth2/userinfo'
  })
]

3. JWT型認証(API駆動型)

✅ 採用例

  • モバイルAPI
  • BFF構成
  • GraphQLバックエンド

✅ 実務の注意点

  • トークン署名はHS256/RSA256等を正しく選定
  • RefreshToken運用必須(アクセストークン短命化)
  • StorageはHttpOnly Cookie推奨(XSS耐性)

✅ JWT生成例

import jwt from 'jsonwebtoken';

const token = jwt.sign({ userId: 1 }, process.env.JWT_SECRET!, { expiresIn: '15m' });

✅ セキュリティポイント

  • XSS対策:HttpOnly Cookie運用
  • CSRF対策:SameSite設定+CSRF Token併用
  • Token失効制御:ブラックリスト運用or短命設計

4. 実務での選定ガイドライン

案件タイプ 推奨パターン
SaaS管理画面 NextAuth.js + サーバーセッション
外部OAuth連携 NextAuth.js + OAuth Providers
モバイルAPI JWT型ステートレス認証
BFF構成 JWT + RefreshToken + API Gateway前段

👉 「何を作るか」に応じて使い分けるのがコツ


5. 認証設計で詰まりやすい落とし穴

❌ 認証情報をLocalStorageに保存

  • XSS耐性が弱い
  • HttpOnly Cookie利用が推奨

❌ RefreshToken運用を軽視

  • 長期セッション維持に失敗しがち
  • 正しいトークン更新フロー必須

❌ Provider別設定ミス

  • OAuth Provider側の設定値間違いが頻出
  • Redirect URIと一致させること

おわりに

認証設計は実務経験がものを言う重要分野です。
Next.js + NextAuth.js を中心に、正しいパターン整理ができると案件提案力・保守性・安全性が一気に上がります。

Qiitaでは今後もこういった実務提案に刺さるフロントエンド設計Tipsを発信していきますので、ぜひLGTM・フォローお願いします!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?