3.1 Passwords
When you sign up with email and password, your password is hashed using bcrypt with a cost factor of 12 before it touches persistent storage. We never see your plaintext password at any point after login and cannot recover it — only reset it.
3.2 Passkeys and 2FA
AskCV supports WebAuthn passkeys for phishing-resistant sign-in and biometric second-factor authentication. You can register multiple passkeys (for example, one on your laptop and one on your phone) from your account settings. We also support TOTP two-factor authentication for users who prefer an authenticator app.
3.3 OAuth sign-in
You can sign in with Google, GitHub, LinkedIn, or Apple. OAuth sign-ins do not unlock additional integration scopes — if you later connect a service like Google Calendar, that grant is a separate, explicit consent flow with scoped permissions.
3.4 Sessions
Sessions are identified by random 64-byte tokens stored as SHA-256 hashes in our database (we never keep the raw token server-side). The corresponding cookies are HttpOnly, Secure, and SameSite=lax. Each session records the IP and user-agent it was created from, so you can review and revoke sessions from account settings.
3.5 Brute-force protection
We lock accounts after a configured number of failed login attempts, rate-limit authentication endpoints, and challenge high-risk sign-ins with the second factor you have registered.
3.6 Admin separation
Platform admins use a separate authentication system from tenant users, with mandatory MFA (TOTP and/or passkeys) and role-scoped permissions. A compromised tenant account cannot escalate to an admin account, and admin sessions cannot act on the public tenant surface.