Built on Cloudflare Workers — globally fast

Authentication that just works for every tenant

Multi-tenant auth with social login, passkeys, TOTP 2FA, RBAC, SCIM provisioning, and a self-service customer portal — deploy once, scale everywhere.

Start Free Read Docs
Features

Everything you need to ship auth

Stop building authentication from scratch. AuthNex provides every piece you need, secured by default.

Multi-Tenant by Default

Isolated user pools, roles, and API keys per tenant. Self-service signup with plan-based limits.

Social Login

Google, Microsoft, and GitHub OAuth built in. Tenants can bring their own credentials for branded consent screens.

Passkeys / WebAuthn

Passwordless authentication with platform authenticators. Register, authenticate, and manage multiple passkeys per user.

TOTP Two-Factor Auth

RFC 6238 compliant TOTP with backup codes. Uses async crypto.subtle for proper HMAC-SHA1.

SCIM 2.0 Provisioning

Enterprise IdP user sync via standard SCIM protocol. Auto-create, update, and deactivate users.

RBAC & Permissions

Flexible role-based access control with custom permissions. System roles plus tenant-scoped roles.

JWT & OIDC

RS256-signed JWTs, JWKS endpoint, and OpenID Connect discovery. Standard token refresh flows.

Custom Branding

Per-tenant logo, colors, and app name. SDK widget automatically fetches and applies your branding.

Audit Logs & Analytics

Full audit trail for every auth event. Analytics dashboards for login trends, anomalies, and security insights.

Integration

Integrate in minutes

Add authentication to any app with a few lines of code. REST API, JS SDK, and PHP SDK available.

Simple REST API

Standard HTTP endpoints for login, registration, token refresh, social auth, 2FA, and more. Use from any language or framework.

JWT access + refresh tokens
Tenant-scoped API keys
CORS-ready for SPAs
OpenID Connect compatible
app.js
// Login and get JWT tokens
const res = await fetch('https://your-worker.dev/api/auth/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    email: 'user@company.com',
    password: 'secure-password',
    tenant_slug: 'acme-corp'
  })
});

const { access_token } = await res.json();

// Use token for protected requests
const profile = await fetch('/api/user/profile', {
  headers: { Authorization: `Bearer ${access_token}` }
});
Pricing

Simple, transparent pricing

Start free, upgrade when you grow. No hidden fees.

Free
$0/mo
Perfect for side projects and prototypes
  • 50 users
  • 5,000 API calls/month
  • Social login
  • Email/password auth
  • Community support
Get Started
Pro
$99/mo
For scaling businesses with enterprise needs
  • 5,000 users
  • 500,000 API calls/month
  • SCIM 2.0 provisioning
  • OIDC / SSO
  • GDPR data export
  • Priority support
Start Free Trial

Ready to ship auth today?

Create your free account and start integrating in minutes.

Create Free Account