コンテンツにスキップ

ログイン

メソッド

RESTメソッドを採用しています。

HTTPメソッド

POST: ユーザーログイン

命名規則

クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時のURIとJSON内のノードにはsnake_caseを使用します。

リクエストとレスポンス

ヘッダー

メタ情報はレスポンスボディではなく、HTTPヘッダーに設定されます。

リクエストヘッダー

  • Content-Type
  • Accept
  • Accept-language

レスポンスヘッダー

  • Content-Type

ログイン

URI

POST /v1/auth/login

リクエストボディ

リクエストボディはJSONです。

{
  "email": "user@example.com",
  "password": "SecurePassword123!"
}

リクエストパラメータ

名前 型 必須 説明
email string 必須 メールアドレス(有効なメールフォーマット)
password string 必須 パスワード(最小8文字)

レスポンス

レスポンスはJSONです。

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": "user-uuid",
    "cognitoSub": "cognito-sub-uuid",
    "organizationId": "org-uuid",
    "name": "John Doe",
    "createdAt": 1234567890000,
    "updatedAt": 1234567890000
  }
}

レスポンスフィールド

名前 型 説明
token string JWTアクセストークン
user object ユーザー情報
user.id string ユーザーUUID
user.cognitoSub string Cognito識別子
user.organizationId string 組織UUID
user.name string ユーザー名
user.createdAt number 作成日時(エポックミリ秒)
user.updatedAt number 更新日時(エポックミリ秒)

認証

このエンドポイントは認証不要です。

例外処理

例外処理のステータスコードは以下の通りです。

説明 ステータスコード ステータス名
無効なメールフォーマット 400 Bad Request
無効な認証情報 401 Unauthorized
内部サーバーエラー 500 Internal Server Error

処理フロー

  1. リクエストボディからemail/passwordを抽出してバリデーション
  2. セッション追跡のためIPアドレスとユーザーエージェントを取得
  3. AWS Cognitoで認証
  4. データベースにセッションレコードを作成
  5. JWTアクセストークンとユーザー情報を返す

詳細フローチャート

flowchart TD
    Start([POST /v1/auth/login]) --> Route[Route Handler]
    Route --> ValidateInput[入力検証<br/>Zodスキーマ]

    ValidateInput --> ValidEmail{email検証}
    ValidEmail -->|NG| Err400[400 Bad Request]
    ValidEmail -->|OK| ValidPass{password検証<br/>min 8文字}

    ValidPass -->|NG| Err400
    ValidPass -->|OK| ExtractMeta[メタデータ取得]

    ExtractMeta --> GetIP[IPアドレス取得<br/>X-Forwarded-For]
    ExtractMeta --> GetUA[User-Agent取得]

    GetIP --> Cognito[AWS Cognito認証]
    GetUA --> Cognito

    Cognito --> CognitoAuth{認証成功?}
    CognitoAuth -->|NG| Err401[401 Unauthorized<br/>無効な認証情報]
    CognitoAuth -->|OK| GetTokens[JWTトークン取得]

    GetTokens --> CreateSession[セッションDB作成<br/>sessionId, IP, UA]

    CreateSession --> GetUser[ユーザー情報取得<br/>cognitoSub]

    GetUser --> UserExists{ユーザー存在?}
    UserExists -->|なし| Err401
    UserExists -->|あり| Success[200 OK<br/>token + user]

セキュリティ

  • セキュリティ監視のためIPアドレスとユーザーエージェントをログに記録
  • 失敗したログイン試行をログに記録
  • レート制限によりブルートフォース攻撃を防止