# Admin API Key Management This document describes the enhanced API key management functionality that allows administrators to create and manage API keys for any user in the system. ## Overview The VFX Project Management System now supports comprehensive API key management with different permission levels: - **Developers**: Can create and manage their own API keys - **Admins**: Can create and manage API keys for any user in the system ## Admin Capabilities ### 1. Create API Keys for Any User Admins can create API keys for any approved user in the system using two methods: #### Method 1: General Endpoint with user_id Parameter ```http POST /auth/api-keys Authorization: Bearer Content-Type: application/json { "name": "Integration Key for John Doe", "scopes": ["read:projects", "read:tasks"], "user_id": 123, "expires_at": "2024-12-31T23:59:59" } ``` #### Method 2: Admin-Specific Endpoint ```http POST /auth/admin/users/123/api-keys Authorization: Bearer Content-Type: application/json { "name": "Integration Key for John Doe", "scopes": ["read:projects", "read:tasks"], "expires_at": "2024-12-31T23:59:59" } ``` ### 2. View All API Keys Admins can view all API keys in the system: ```http GET /auth/api-keys Authorization: Bearer ``` Response includes user email for each API key: ```json [ { "id": 1, "user_id": 123, "user_email": "john.doe@example.com", "name": "Integration Key", "scopes": ["read:projects", "read:tasks"], "is_active": true, "expires_at": "2024-12-31T23:59:59Z", "last_used_at": "2024-01-15T10:30:00Z", "created_at": "2024-01-01T00:00:00Z" } ] ``` ### 3. View API Keys for Specific User ```http GET /auth/admin/users/123/api-keys Authorization: Bearer ``` ### 4. Manage Any API Key Admins can update or delete any API key in the system: ```http PUT /auth/api-keys/456 DELETE /auth/api-keys/456 Authorization: Bearer ``` ### 5. View Usage Logs for Any API Key ```http GET /auth/api-keys/456/usage Authorization: Bearer ``` ## API Key Scopes Available scopes for API keys: - `read:projects` - Read access to all projects - `read:tasks` - Read access to all tasks - `read:submissions` - Read access to all submissions - `read:users` - Read access to user information - `write:tasks` - Write access to tasks - `write:submissions` - Write access to submissions - `admin:users` - Administrative access to user management - `full:access` - Full system access ## Security Features 1. **API Key Hashing**: All API keys are hashed before storage using SHA-256 2. **Usage Logging**: Every API request is logged with timestamp, endpoint, method, IP address, and user agent 3. **Expiration**: API keys can have expiration dates 4. **Revocation**: API keys can be deactivated or deleted at any time 5. **Scope-based Access**: Fine-grained permissions control what each API key can access ## Developer vs Admin Permissions | Action | Developer | Admin | |--------|-----------|-------| | Create own API keys | ✅ | ✅ | | Create API keys for others | ❌ | ✅ | | View own API keys | ✅ | ✅ | | View all API keys | ❌ | ✅ | | Update own API keys | ✅ | ✅ | | Update any API key | ❌ | ✅ | | Delete own API keys | ✅ | ✅ | | Delete any API key | ❌ | ✅ | | View own usage logs | ✅ | ✅ | | View any usage logs | ❌ | ✅ | ## Usage Examples ### Creating an API Key for a Developer As an admin, you can create API keys for developers who need to integrate external tools: ```python import requests # Admin login admin_token = login_as_admin() # Create API key for developer response = requests.post("http://localhost:8000/auth/api-keys", headers={"Authorization": f"Bearer {admin_token}"}, json={ "name": "CI/CD Pipeline Integration", "scopes": ["read:projects", "read:tasks", "write:submissions"], "user_id": 456, # Developer's user ID "expires_at": "2024-12-31T23:59:59" } ) api_key_data = response.json() print(f"API Key: {api_key_data['token']}") ``` ### Monitoring API Usage Admins can monitor how API keys are being used: ```python # Get usage logs for an API key response = requests.get(f"http://localhost:8000/auth/api-keys/123/usage", headers={"Authorization": f"Bearer {admin_token}"} ) usage_logs = response.json() for log in usage_logs: print(f"{log['timestamp']}: {log['method']} {log['endpoint']} from {log['ip_address']}") ``` ## Best Practices 1. **Principle of Least Privilege**: Only grant the minimum scopes necessary 2. **Regular Rotation**: Set expiration dates and rotate API keys regularly 3. **Monitor Usage**: Regularly review API key usage logs 4. **Revoke Unused Keys**: Delete or deactivate API keys that are no longer needed 5. **Secure Distribution**: Share API keys securely and never commit them to version control ## Testing Use the provided test script to verify admin functionality: ```bash cd backend python test_admin_api_keys.py ``` This script demonstrates all admin API key management capabilities.