Prioritized security fixes for the authentication implementation.
Risk: Duplicate users, integrity errors
File: backend/app/core/auth.py
Use database-level upsert to handle concurrent requests safely.
Risk: Wrong token type accepted
File: backend/app/core/auth.py
if claims.get("token_use") != "access":
raise HTTPException(status_code=401, detail="Invalid token type")Risk: DoS via resource exhaustion Files: API endpoints
MAX_PAGE_SIZE = 100
page_size: int = Query(20, ge=1, le=MAX_PAGE_SIZE)Risk: Information leakage
File: backend/app/core/auth.py
Log full errors internally, return generic messages to clients.
Risk: Performance degradation File: Migration
op.create_index('ix_resources_user_id', 'resources', ['user_id'])
op.create_index('ix_resources_organization_id', 'resources', ['organization_id'])Risk: Cache corruption under load
File: backend/app/core/auth.py
Use asyncio.Lock or Redis for cross-worker cache.
Risk: Long sessions fail mid-operation File: WebSocket handlers
Add periodic token validation during long-running operations.
Risk: Auth logic untested File: New test file
def test_expired_token_rejected():
def test_wrong_audience_rejected():
def test_malformed_token_rejected():def require_role(allowed_roles: list[str]):
def checker(user: User = Depends(get_current_user)):
if user.role not in allowed_roles:
raise HTTPException(403, "Insufficient permissions")
return user
return checkerclass SoftDeleteMixin:
deleted_at = Column(DateTime, nullable=True)
deleted_by = Column(UUID, nullable=True)class AuditLog(Base):
user_id = Column(UUID)
action = Column(String) # create, update, delete
resource_type = Column(String)
resource_id = Column(UUID)
changes = Column(JSONB)- MFA support via Cognito
- Token revocation with Redis blacklist
- Abstract auth provider interface
- Feature flags for auth settings
- Unit test for each fix
- Integration test with mocked Cognito
- Manual test in preprod
- Security scan (OWASP ZAP)
- Auth failure rate (alert if > 5%)
- User creation rate (detect race conditions)
- Token validation latency
- 401/403 response rate by endpoint