Configuration Overview
Authentication is configured insrc/lib/auth.ts with the following components:
- Adapter: Prisma Adapter for database session storage
- Session Strategy: JWT (JSON Web Tokens)
- Provider: Credentials provider with bcrypt password hashing
- Custom Pages: Branded login and onboarding flows
Authentication Flow
User submits credentials
Email and password are sent to the credentials provider via the login form.
Password verification
Submitted password is compared against the stored bcrypt hash using
bcryptjs.compare().JWT creation
On success, a JWT token is created containing:
- User ID
- User role (ADMIN, ANALYST, VIEWER)
- Onboarding status
Environment Variables
Required configuration for NextAuth:Canonical URL of your deployment.Development:
http://localhost:3000Production: https://vulntrack.yourdomain.comSecret key for signing and encrypting JWT tokens.Generate with:
openssl rand -base64 32Session Configuration
VulnTrack uses JWT-based sessions for stateless authentication:src/lib/auth.ts
- No database queries for session validation
- Horizontal scaling without session stores
- Reduced database load
user.id- Unique user identifieruser.email- User email addressuser.name- Display nameuser.role- Access control role (ADMIN, ANALYST, VIEWER)user.isOnboarded- Onboarding completion status
Credentials Provider
VulnTrack implements a custom credentials provider for email/password authentication:Password Hashing
Passwords are hashed using bcrypt with automatic salt generation:Bcrypt automatically handles salt generation and storage within the hash string.
Authorization Logic
Theauthorize() function in src/lib/auth.ts:23 handles:
- Validation - Checks that email and password are provided
- User Lookup - Queries database for user by email
- Password Check - Verifies password against stored hash
- Return User Object - Returns user data for JWT encoding
Security Features
- Constant-time password comparison (bcrypt)
- No password returned in session data
- Failed login attempts return generic error messages (prevents email enumeration)
Custom Pages
VulnTrack overrides default NextAuth pages:signIn
Custom branded login page with VulnTrack styling.
newUser
Post-registration onboarding flow (Note: primarily for OAuth flows).
JWT Callbacks
VulnTrack extends JWT tokens with custom claims:JWT Callback (src/lib/auth.ts:70)
Executed when a token is created or updated:- Fetches fresh user data on every token use
- Ensures role changes are reflected immediately
- Updates onboarding status dynamically
Session Callback (src/lib/auth.ts:59)
Attaches user data to the session object:Role-Based Access Control
VulnTrack implements three user roles:Full system access:
- Create and manage teams
- Send invitations
- Manage all vulnerabilities
- Access audit logs
- Configure system settings
Operational access:
- Create and edit vulnerabilities
- Assign vulnerabilities
- Add comments and assessments
- Generate reports
Read-only access:
- View vulnerabilities
- Read comments
- Access reports
- Cannot modify data
Protecting Routes
Server Components
UsegetServerSession to protect server components:
Server Actions
Protect server actions with session checks:Client Components
UseuseSession hook for client-side checks:
Invitation System
VulnTrack uses an invitation-only registration system:Admin creates invitation
Admin generates a unique invitation token with expiration (typically 24 hours).
User completes registration
User creates account using the invitation link. Token is validated and consumed.
See Email Configuration for invitation email setup.
Security Best Practices
Secure secrets
Generate strong
NEXTAUTH_SECRET values and never commit them to version control.HTTPS in production
Always use HTTPS in production. NextAuth will reject non-HTTPS URLs.
Rate limiting
Implement rate limiting on login endpoints to prevent brute force attacks.
Password policy
Enforce minimum password requirements during registration (length, complexity).