mcpField
A
auth-module-builder

auth-module-builder

github.com/patricio0312revセキュリティ63250 回インストール41 週間前に更新
リポジトリ

auth-module-builder について

Webアプリケーションを開発する人向けに、認証モジュールの実装方法を示すスキルです。ルート、ミドルウェア、パスワード処理、JWTまたはセッション方式、一般的な脅威への対策を扱います。

主な機能

  1. 01一般的な認証ルートの定義
  2. 02認証ミドルウェアの追加
  3. 03bcryptによるパスワードのハッシュ化と検証
  4. 04JWTまたは保存型セッションの利用
  5. 05CookieとCSRFの保護
  6. 06一般的な認証脅威への対策

活用シーン

  1. 01ログインと登録フローの構築
  2. 02トークン更新とパスワードリセットの追加
  3. 03Redisまたはデータベースでのセッション保存
  4. 04認証エンドポイントの防御策の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/patricio0312rev/skills --skill auth-module-builder

インストール後、Claude Code で/auth-module-builderを入力して読み込まれたか確認します。

詳細

認証モジュールビルダー

安全で本番環境に対応した認証システムを実装します。

コアコンポーネント

ルート:POST /login、/register、/logout、/refresh、/forgot-password ミドルウェア:authenticate、requireAuth、optionalAuth セキュリティ:bcrypt によるハッシュ化、JWT 署名、安全な Cookie、CSRF トークン セッション:Redis/DB ストレージ、有効期限、リフレッシュトークン 脅威:一般的な攻撃とその緩和策を記述します

JWT パターン

// Generate tokens
const accessToken = jwt.sign(
  { userId: user.id, email: user.email },
  process.env.JWT_SECRET,
  { expiresIn: "15m" }
);

const refreshToken = jwt.sign(
  { userId: user.id, type: "refresh" },
  process.env.JWT_REFRESH_SECRET,
  { expiresIn: "7d" }
);

// Verify middleware
export const authenticate = async (req, res, next) => {
  const token = req.headers.authorization?.split(" ")[1];
  if (!token) return res.status(401).json({ error: "No token" });

  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = await User.findById(decoded.userId);
    next();
  } catch (err) {
    res.status(401).json({ error: "Invalid token" });
  }
};

セッションパターン

// Express session with Redis
app.use(
  session({
    store: new RedisStore({ client: redisClient }),
    secret: process.env.SESSION_SECRET,
    resave: false,
    saveUninitialized: false,
    cookie: {
      secure: process.env.NODE_ENV === "production",
      httpOnly: true,
      maxAge: 1000 * 60 * 60 * 24 * 7, // 7 days
      sameSite: "lax",
    },
  })
);

パスワードのセキュリティ

import bcrypt from "bcrypt";

// Hash password
const hashedPassword = await bcrypt.hash(password, 10);

// Verify password
const isValid = await bcrypt.compare(password, user.hashedPassword);

セキュリティチェックリスト

  • パスワードを bcrypt でハッシュ化する(コスト ≥10)
  • JWT シークレットを環境変数から取得し、定期的にローテーションする
  • 本番環境では HTTPS のみを使用する
  • httpOnly、secure Cookie を使用する
  • CSRF 対策を有効にする
  • 認証ルートにレート制限を設定する
  • ログイン失敗後にアカウントをロックする
  • パスワードリセットトークンに有効期限を設定する
  • 新しいアカウントでメールアドレスを確認する

脅威モデル

ブルートフォース攻撃:レート制限+アカウントロック トークンの窃取:短い有効期限、httpOnly Cookie、HTTPS のみ CSRF:SameSite Cookie+CSRF トークン セッション固定攻撃:ログイン時にセッション ID を再生成する XSS:入力値のサニタイズ、CSP ヘッダー

コメント