コンテンツにスキップ

認証・セッション管理

認証方式

smooth は JWT(JSON Web Token)ベースの認証を採用しています。

トークン 保存場所 有効期限
アクセストークン HTTP-only Cookie 短期間(数分〜数時間)
リフレッシュトークン HTTP-only Cookie 長期間(数日〜数週間)

アクセストークンが期限切れになると、リフレッシュトークンを使って自動更新されます。


ログイン方法

メール + パスワード

POST /api/v1/auth/login
Body: { email, password }
→ アクセストークン・リフレッシュトークンを Cookie に保存

LINE LIFF(smooth-mobile の主要ログイン)

smooth-mobile では LINE LIFF(LINE Front-end Framework) をデフォルトの認証方式として採用しています。

sequenceDiagram
    participant User as ユーザー
    participant App as smooth-mobile
    participant LINE as LINE Platform
    participant API as バックエンド

    User->>App: LINEログインボタンをクリック
    App->>LINE: LIFF SDK で認証開始
    User->>LINE: LINEアカウントで認証
    LINE-->>App: LINE アクセストークン
    App->>API: LINE トークンを送信
    API->>LINE: トークン検証・ユーザー情報取得
    API-->>App: JWT を Cookie に保存

Google / Apple(ソーシャルログイン)

smooth-owner および smooth-mobile(オプション)では Firebase Authentication 経由でソーシャルログインをサポートしています。Firebase SDK がOAuth処理を担い、取得した Firebase ID トークンをバックエンドに送信します。

sequenceDiagram
    participant User as ユーザー
    participant App as smooth-owner
    participant Firebase as Firebase Authentication
    participant API as バックエンド

    User->>App: Googleログインボタンをクリック
    App->>Firebase: Firebase SDK で OAuth 開始
    User->>Firebase: Googleアカウントで認証
    Firebase-->>App: Firebase ID トークン
    App->>API: Firebase ID トークンを送信
    API->>Firebase: トークン検証(firebase_auth_service)
    Firebase-->>API: ユーザー情報(メール・プロバイダー等)
    API->>API: ユーザー作成 or 既存ユーザー特定
    API-->>App: JWT を Cookie に保存

注意: AWS Cognito Hosted UI は現在廃止されています。コードベースにレガシーとして残存していますが、本番環境では使用されていません。


セッション管理

複数デバイスからのログインに対応しており、user_sessions テーブルでデバイス単位のセッションを管理します。

エンドポイント 説明
GET /auth/sessions ログイン中のデバイス一覧
GET /auth/sessions/{id} セッション詳細
POST /auth/sessions/logout-all 全デバイスからログアウト

パスワード管理

エンドポイント 説明
POST /auth/forgot-password パスワードリセットメールを送信
POST /auth/reset-password パスワードリセット(メールのリンクから)
POST /auth/change-password パスワード変更(ログイン済み)