What's Changed
๐ Authentication - Runtime OIDC Configuration
Complete support for runtime OIDC configuration via config.json, enabling Docker deployments without rebuilding the frontend:
- Runtime config.json support - OIDC settings (authority, clientId, scope) loaded at runtime instead of build-time
- Fixed token exchange - Callback route now uses async config for token exchange
- Fixed token validation - Storage key correctly derived from runtime config
- Fixed API authentication - tRPC client retrieves tokens with correct storage key
๐งช Testing
- E2E production tests - Comprehensive Playwright test suite for OIDC authentication flow:
- Config.json serving validation
- Keycloak redirect for unauthenticated users
- Complete login flow with runtime config
- API calls with authenticated session
- Token storage verification
- Session persistence across page reloads
- In-app navigation
- Logout flow
- Error handling for invalid credentials
๐ Documentation
- Keycloak integration guide - Comprehensive setup and configuration documentation
- Deployment instructions - Database migration and OIDC configuration guides
Upgrade Notes
No breaking changes. Existing deployments will continue to work. To enable runtime OIDC configuration:
- Mount a
config.jsonfile to/usr/share/nginx/html/config.jsonin the frontend container - Remove
VITE_OIDC_*environment variables from build process (optional)
Example config.json:
{
"oidc": {
"authority": "https://your-keycloak.com/realms/your-realm",
"clientId": "your-client-id",
"scope": "openid profile email"
}
}