操作
バグ #736
未完了認証機能実装 - Redmine APIキー認証 (子チケット)
ステータス:
新規
優先度:
高め
担当者:
-
開始日:
2025-06-26
期日:
進捗率:
0%
予定工数:
説明
認証機能実装 - Redmine APIキー認証¶
🎯 概要¶
VPS-ROOT Infrastructure Helperサービスの認証基盤として、Redmine APIキー認証を実装します。
📋 実装対象¶
1. API エンドポイント¶
-
POST /api/v1/auth/login
- APIキー認証 -
POST /api/v1/auth/logout
- ログアウト -
GET /api/v1/auth/session
- セッション確認 -
POST /api/v1/auth/refresh
- セッション更新
2. 主要関数¶
authenticateWithRedmine(apiKey: string): Promise<RedmineUser>
validateApiKey(apiKey: string): Promise<boolean>
createSession(user: RedmineUser): Promise<SessionToken>
validateSession(token: string): Promise<SessionData>
3. UI コンポーネント¶
-
LoginPage.tsx
- ログイン画面 -
RedmineApiKeyInput
- APIキー入力フィールド -
SessionTimeoutIndicator
- セッション残り時間表示
🔧 技術仕様¶
認証フロー¶
- ユーザーがRedmine APIキーを入力
- call2arm.com のRedmine APIで認証確認
- セッション作成・JWT発行
- ロールベースアクセス制御適用
セキュリティ要件¶
- APIキーのハッシュ化保存
- セッション有効期限管理 (24時間)
- CSRF対策
- ブルートフォース攻撃対策
✅ 完了条件¶
- API エンドポイント実装完了
- 認証関数群実装完了
- UI コンポーネント実装完了
- セッション管理機能動作確認
- セキュリティテスト合格
🔗 関連チケット¶
親チケット: インフラヘルパーサービス基盤構築
📅 期限¶
Phase 1 - 基盤実装: 2025年6月30日まで
Redmine Admin さんが7分前に更新
📋 認証機能実装 - 現状・詳細仕様追記¶
🔍 現在の実装状況
API エンドポイント実装状況¶
エンドポイント | メソッド | 実装状況 | パラメータ | レスポンス |
---|---|---|---|---|
/api/v1/auth/login |
POST | ✅ 完成 | {apiKey: string} |
{token, user, expiresAt} |
/api/v1/auth/logout |
POST | ✅ 完成 | {} |
{success: boolean} |
/api/v1/auth/validate |
GET | ✅ 完成 | Authorization: Bearer |
{valid, user} |
/api/v1/auth/refresh |
POST | ✅ 完成 | {refreshToken} |
{token, expiresAt} |
/api/v1/auth/profile |
GET | ✅ 完成 | Authorization: Bearer |
{user, permissions} |
関数実装状況 (12/12 完成)¶
ファイル: /src/services/auth/RedmineAuthService.ts
✅ 基本認証関数 (4/4 完成)¶
// Redmine API認証 - 完成
async authenticateWithRedmine(apiKey: string): Promise<RedmineUser>
async validateApiKey(apiKey: string): Promise<boolean>
async getUserInfo(apiKey: string): Promise<RedmineUser>
async checkUserPermissions(apiKey: string): Promise<Permission[]>
✅ セッション管理関数 (4/4 完成)¶
// セッション管理 - 完成
async createSession(user: RedmineUser): Promise<SessionToken>
async validateSession(token: string): Promise<SessionData>
async refreshSession(token: string): Promise<SessionToken>
async revokeSession(sessionId: string): Promise<void>
✅ 権限チェック関数 (4/4 完成)¶
// 権限管理 - 完成
checkResourcePermission(user: RedmineUser, resource: string, action: string): boolean
getUserRole(user: RedmineUser): UserRole
hasAdminAccess(user: RedmineUser): boolean
canAccessResource(user: RedmineUser, resourceId: string): boolean
🎯 完成済み機能詳細
認証フロー¶
- ✅ ユーザーがRedmine APIキーを入力
- ✅ call2arm.com のRedmine APIで認証確認
- ✅ セッション作成・JWT発行
- ✅ ロールベースアクセス制御適用
セキュリティ要件¶
- ✅ APIキーのハッシュ化保存
- ✅ セッション有効期限管理 (24時間)
- ✅ CSRF対策
- ✅ ブルートフォース攻撃対策
📈 進捗サマリー
- API エンドポイント: 5/5 (100%) 完成
- 認証関数群: 12/12 (100%) 完成
- UI コンポーネント: 要実装
- セッション管理: 完成
- セキュリティ機能: 完成
認証機能は基盤部分が完成済み。次のフェーズはUI実装に移行可能! ✅
操作