Authentication
Stop building auth.
Start shipping product.
Every way to sign in — email, social, magic links, OTP, MFA, passkeys — from one SDK call. Branded login page included. Free for 5,000 users.
Available on Free and above. See pricing
Passkeys / WebAuthn
The credential never leaves the device. Nothing to phish.
A passkey is a public/private key pair minted by the authenticator under the WebAuthn (W3C) and FIDO2 / CTAP standards. On registration the
device generates the pair, keeps the private key in hardware (Secure Enclave, TPM, or a security
key), and hands your server only the public key. On login the browser signs a server-issued challenge; AuthFI verifies that signature against the stored public key. No shared
secret ever crosses the wire, so there is nothing in your database an attacker can steal and
replay.
- Origin-bound by design: the signature is scoped to your
rpId, so a credential minted for your domain is useless on a look-alike phishing site — this is why passkeys are phishing-resistant, not just "strong". - Resident keys (discoverable credentials): the key carries the user handle, enabling usernameless sign-in — the device offers the right account with no email field at all.
- Attestation: at registration the authenticator can present a signed statement of its make and model, so regulated tenants can require certified hardware.
- The payoff: no password to reset, no OTP to intercept, no shared secret to breach — you delete an entire category of incident from your roadmap.
// server issues a one-time challenge; the
// authenticator signs it — private key stays in hardware
const assertion = await navigator.credentials.get({
publicKey: {
challenge: serverChallenge, // single-use
rpId: "auth.acme.com", // origin-bound
userVerification: "required" // biometric / PIN
}
});
// → AuthFI verifies signature vs. stored public key
// checks rpIdHash, flags (UP+UV), and counter
POST /webauthn/assertion ⟶ 200 sessionWebAuthn assertion: a signed challenge, verified server-side. No password field anywhere in this flow.
Welcome to Acme
Sign in to continue
Branded login
Your brand on the page. Six methods behind one API.
Every login page is fully customizable — your users see your brand at auth.acme.com/login, not ours. Behind it, six sign-in methods are toggled on from
the dashboard, each one a configuration flag rather than a fork in your codebase. The hosted page
owns the security-sensitive surface — credential handling, redirect validation, rate limiting — so
your application never touches a raw password.
Email / Password
Breach detection, progressive lockout, configurable policy.
Social Login
Google, GitHub, GitLab. One click. Profile synced.
Magic Links
Passwordless email login. 15-min single-use tokens.
OTP (Email)
6-digit code, 5-min expiry, 5 attempts max.
MFA (TOTP)
Google Authenticator, Authy. QR enrollment. 10 backup codes.
Passkeys
WebAuthn / FIDO2. Biometric. Phishing-resistant.
Adaptive & step-up MFA
Friction only when the risk is real.
Static "MFA on every login" trains users to click through prompts and still misses session hijacking. Adaptive authentication scores each attempt from contextual signals — network, device, velocity, geography, credential reputation — and only escalates when the score crosses a threshold. A login from a known device on a known network passes silently; a new ASN with impossible travel triggers step-up: re-prompt for a passkey or a TOTP code before the session is issued or a sensitive action proceeds.
- Risk-based, not blanket: the same policy that lets trusted sessions through is the one that blocks the anomalous 0.1% — fewer prompts and fewer takeovers.
- Step-up at the action, not just the door: re-authenticate for a high-value operation (change email, move money) even inside a live session.
- Breach-aware: a credential found in a known breach corpus is itself a risk signal that can force a reset — building on the 700M+ compromised-password check AuthFI already runs.
- The payoff: you tune the security/UX trade-off with a policy, not by shipping branching auth logic to every client.
Signals are weighed per attempt; only a high aggregate score escalates to a second factor.
Drop-in SDK
Three lines of code. Seven languages.
Install the SDK, initialize with your tenant, protect routes. The SDK runs the OAuth 2.0 authorization-code flow with PKCE for you, validates the returned token, and exposes session and permission checks — so passwordless, MFA and risk policy are decisions made in the dashboard, not branches you maintain in seven codebases.
const auth = authfi({ tenant: 'acme' });
app.use(auth.middleware());
app.get('/api/users', auth.require('read:users'), handler);Security model
Security built in. Not bolted on.
The defenses that matter are the ones that run on every flow without a config flag — and the ones you would otherwise have to build, test, and re-audit yourself for each language and each tenant.
Breached password detection
700M+ compromised passwords checked on every signup and login.
PKCE + token rotation
S256 PKCE on every flow. Automatic refresh token rotation with family detection.
Per-tenant RSA keys
Every tenant gets unique RSA-2048 signing keys. No shared secrets.
S256 PKCE neutralizes authorization-code interception; refresh-token rotation with family detection means a stolen-then-reused token invalidates the whole token family on next use — a replay becomes a logout, not a breach. Per-tenant RSA-2048 (RS256) signing keys mean one tenant's tokens are never verifiable as another's: no shared secret, no blast radius across customers.
Build vs. integrate
Stop building auth. Start shipping product.
Every method here — passwords, social, magic links, OTP, MFA, passkeys, and the risk engine that governs them — is one SDK call and a dashboard toggle. The standards are non-negotiable; what's negotiable is whether your team re-implements them. Free for 5,000 users.
What you delete
- Password storage, hashing, reset flows, and the breach-response runbook that comes with them.
- Per-language WebAuthn ceremony handling, attestation parsing, and signature verification.
- Hand-rolled MFA enrollment, TOTP drift windows, and backup-code management.
What you get
- Phishing-resistant passkeys and adaptive step-up behind one API, on by toggle.
- A hosted, branded login surface that keeps raw credentials out of your application.
- A standards-based stack — WebAuthn / FIDO2, OAuth 2.0 / PKCE, TOTP — you can hand an auditor.
Get started
Ready to get started?
Free for 5,000 monthly active users. No credit card required.