Add JWT authentication and authorization to API endpoints #33
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implements production-grade JWT-based authentication for API endpoints. Static user configuration for MVP; designed for OAuth/OIDC integration.
Core Implementation
src/utils/auth.py): Token creation/validation, bcrypt password hashing, FastAPI dependency for route protectionsrc/interfaces/web_api.py):/chat,/ws/chat,/auth/refreshrequire valid JWT; health endpoints remain publicPOST /auth/loginaccepts username/password, returns JWT access tokenConfiguration
Application fails fast if
JWT_SECRETnot set.WebSocket Authentication
Security
localhost:3000,8080(update for production domains)fastapi==0.115.5,python-multipart==0.0.18(fixes ReDoS and DoS CVEs)Testing
24 tests covering authentication flows, token validation, protected/public endpoint access, WebSocket auth. CI pipeline via GitHub Actions.
Production Readiness
TODOs marked for production deployment:
Default credentials (dev only):
admin/admin123Original prompt
This pull request was created as a result of the following prompt from Copilot chat.
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.