個人開発の共通認証基盤
個人開発プロジェクト向けの再利用可能な認証サーバー(auth.pluie-lab.com)。メール認証、OAuth、2FAなどをサポートし、複数のプロジェクトで共通認証機能を提供します。
作成日: 2025年5月12日
更新日: 2025年5月25日

注記: このプロジェクトは、Clerkを使用することに決定したため中止されました。開発スピードの向上とセキュリティの強化を目的として、実績のある認証ソリューションを活用することにしました。
概要
個人開発プロジェクトで毎回認証機能を実装するのは手間がかかります。そこで、再利用可能な共通認証基盤を構築し、複数のプロジェクトで利用できるようにします。
この認証サーバーは以下の機能を提供します:
- メールアドレス + パスワード認証
- OAuth連携認証(Google、GitHub等)
- 2要素認証(TOTP)
- セキュアなトークン管理
- クロスドメイン認証
主な機能
1. ログインシステム
- ユーザーフレンドリーなログインフォーム
- ブルートフォース攻撃対策
- IPベースの接続制限
- ログイン試行回数制限
2. トークン管理
- JWT発行と検証
- Refresh Tokenの安全な管理
- JWKS(JSON Web Key Set)エンドポイント
- 定期的な鍵ローテーション
- トークン盗用検知
3. Cookie管理
- 安全なCookie設定
- HttpOnly属性
- SameSite=Strict属性
- Secure属性(HTTPS環境)
- クロスドメイン対応の適切なDomain設定
- 適切な有効期限設定
4. ログアウト機能
- 安全なログアウト処理
- Cookie削除
- Refresh Tokenの無効化
- リダイレクト処理
技術仕様
Refresh Token
- 形式: JWT または ランダム文字列
- 有効期限: 7日間
- 保存方法: httpOnly Cookie
- ローテーション: 使用時に新トークン発行
- 失効条件: 期限切れ、明示的ログアウト、セキュリティ上の無効化
Access Token
- 形式: JWT
- 署名アルゴリズム: RS256/ES256
- 有効期限: 15分
- 返却方法: JSONレスポンス
- ペイロード:
- 発行者(issuer)
- 対象(subject)
- 対象者(audience)
- 有効期限(expiration)
- 発行時刻(issued at)
- JWT ID
- スコープ/権限
鍵管理
- RSA 2048bit または EC P-256
- 鍵ID(kid)による識別
- 30日ごとの定期ローテーション
- 移行期間中の複数鍵同時有効化
API エンドポイント
公開API
GET /.well-known/jwks.json
- JWT検証用の公開鍵セットGET /login
- ログインページ表示POST /login
- ユーザー認証処理POST /logout
- ログアウト処理POST /api/refresh
- Access Token更新
セキュリティ考慮事項
- CSRF対策
- XSS対策
- パスワード強度確認
- アカウントロック機能
- ロギングと監査
- エラーハンドリング
次のステップ
- サーバーアーキテクチャの詳細設計
- データベースモデルの設計
- API仕様の詳細ドキュメント作成
- フロントエンドUIの設計
- バックエンドAPI実装
- セキュリティテスト
- 運用設計(監視、ログ、メンテナンス)