✅ Backend Implementation: - Add Azure AD JWT token validation middleware - Create hybrid authentication system supporting both Azure AD and password auth - Implement auto-provisioning for new Azure AD users - Add admin controls to toggle password authentication - Update all API routes to use hybrid authentication - Add database fields for authentication (password, lastLoginAt) - Create comprehensive auth routes with validation endpoints ✅ Frontend Implementation: - Install and configure Azure MSAL browser library - Create Azure AD authentication service with popup/redirect support - Build hybrid authentication service managing both auth methods - Update Login.vue with modern dual-authentication UI - Implement dynamic password auth toggle based on admin settings - Update App.vue for proper session management and validation - Modify API service to handle both token types ✅ Security Features: - Azure AD tenant validation (Oliver Agency) - Role-based access control with auto-admin assignment - JWT token validation for both auth methods - Automatic user provisioning with proper defaults - Session validation and automatic logout on token expiry ✅ Admin Features: - Toggle password authentication on/off - Manage users from both authentication methods - Full role and agent access control - Azure AD user auto-provisioning as regular users ✅ Configuration: - Azure AD: Tenant e519c2e6-bc6d-4fdf-8d9c-923c2f002385 - Client ID: 9079054c-9620-4757-a256-23413042f1ef - Development redirect URI support - Fallback password authentication for testing 🔧 Technical Stack: - Azure MSAL Browser & Node libraries - JWT token validation and hybrid middleware - Database schema updates with migrations - Vue.js integration with MSAL - Express.js hybrid authentication routes 🚀 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
45 lines
1 KiB
JSON
45 lines
1 KiB
JSON
{
|
|
"name": "server",
|
|
"version": "1.0.0",
|
|
"description": "",
|
|
"main": "index.js",
|
|
"scripts": {
|
|
"dev": "nodemon index.js",
|
|
"start": "node index.js",
|
|
"db:migrate": "node migrations/migrate.js",
|
|
"db:seed": "node migrations/seed.js",
|
|
"test": "jest"
|
|
},
|
|
"keywords": [],
|
|
"author": "",
|
|
"license": "ISC",
|
|
"type": "commonjs",
|
|
"dependencies": {
|
|
"@azure/msal-node": "^3.7.3",
|
|
"bcrypt": "^6.0.0",
|
|
"chart.js": "^4.5.0",
|
|
"cors": "^2.8.5",
|
|
"dotenv": "^17.2.2",
|
|
"express": "^5.1.0",
|
|
"express-rate-limit": "^8.0.1",
|
|
"helmet": "^8.1.0",
|
|
"joi": "^18.0.1",
|
|
"jsonwebtoken": "^9.0.2",
|
|
"jwt-decode": "^4.0.0",
|
|
"morgan": "^1.10.1",
|
|
"multer": "^2.0.2",
|
|
"node-cache": "^5.1.2",
|
|
"node-fetch": "^3.3.2",
|
|
"openai": "^5.18.1",
|
|
"pg": "^8.16.3",
|
|
"redis": "^5.8.2",
|
|
"sequelize": "^6.37.7",
|
|
"uuid": "^11.1.0",
|
|
"vue-chartjs": "^5.3.2"
|
|
},
|
|
"devDependencies": {
|
|
"concurrently": "^9.2.1",
|
|
"jest": "^30.1.3",
|
|
"nodemon": "^3.1.10"
|
|
}
|
|
}
|