/admin/security) to review sign-in activity and unlock accounts. Staff manage their own MFA from Profile.
MFA (required for password sign-in)
- Sign in with your DOE email and password
- Enter the 6-digit code from your authenticator app (or enroll on Profile if prompted)
- Keep the authenticator app available — if you lose the device, ask an Admin to reset MFA, then re-enroll from Profile
Sessions
Idle sign-out does not replace the 12-hour JWT. The idle prompt is a client-side check (default 15 minutes of inactivity). A session can last up to 12 hours if the user stays active; after that the JWT expires regardless of idle settings.
Admin → Security
Open Admin → Security to:- Filter auth events (bad password, unknown user, bad MFA, lock/unlock, MFA disabled/enabled, user created, successful sign-in)
- See counts for failures, MFA failures, successes, and currently locked accounts
- Unlock a locked account immediately
Account lockout
After 8 failed password or MFA attempts, the account is locked for about 30 minutes.- Sign-in shows a clear locked message
- Admins unlock from Admin → Security or Users → Security → Unlock account
- Lockouts and unlocks appear in the security event log; notification recipients can get an email when an account locks
Email alerts
When email notifications are configured, Admins / recipients can be notified for:User recovery (Admin)
From Admin → Users (/admin/users):
- Toggle MFA Enabled on the user edit modal, security dialog, or row action menu
- When MFA is disabled, that account skips the authenticator challenge at sign-in (testing/QA). A red MFA Disabled badge appears on the user, and an audit event is logged
- Reset MFA clears the authenticator enrollment so the user can re-enroll from Profile (does not by itself skip MFA at login)
- Reset password (forces change on next login)
- Force / clear password change
- Unlock a locked account
Platform protections (production)
These run outside the app UI:- New York State geo wall — visitors outside NY see a blocked page (cron/sync/health bypass)
- Vercel Firewall — rate limit on
/api/auth; challenge on/auth/signin; NY-only deny rule

