ログイン
メソッド
RESTメソッドを採用しています。
HTTPメソッド
POST: ユーザーログイン
命名規則
クエリパラメータとノードの命名を統一し、可読性を向上させるため、リクエスト時のURIとJSON内のノードにはsnake_caseを使用します。
リクエストとレスポンス
ヘッダー
メタ情報はレスポンスボディではなく、HTTPヘッダーに設定されます。
リクエストヘッダー
Content-TypeAcceptAccept-language
レスポンスヘッダー
Content-Type
ログイン
URI
リクエストボディ
リクエストボディはJSONです。
リクエストパラメータ
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
| 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 |
処理フロー
- リクエストボディからemail/passwordを抽出してバリデーション
- セッション追跡のためIPアドレスとユーザーエージェントを取得
- AWS Cognitoで認証
- データベースにセッションレコードを作成
- 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アドレスとユーザーエージェントをログに記録
- 失敗したログイン試行をログに記録
- レート制限によりブルートフォース攻撃を防止