Skip to content

Split View: 인증 프로바이더 정면 비교 2026 — Clerk · WorkOS · Auth0 · Stytch · Better Auth · Kinde · SuperTokens 그리고 NextAuth·Lucia 사후 정리

|

인증 프로바이더 정면 비교 2026 — Clerk · WorkOS · Auth0 · Stytch · Better Auth · Kinde · SuperTokens 그리고 NextAuth·Lucia 사후 정리

프롤로그 — 인증을 사는 시대

2026년 5월의 인증 시장은 5년 전과 완전히 다르다. 2021년에는 "Auth0를 쓸까, Cognito를 쓸까, 직접 만들까"가 전부였다. 지금은 같은 질문에 적어도 열 개의 답이 있고, 각 답이 서로 다른 가격·운영 부담·기능 집합을 가진다.

이 시장은 두 갈래로 찢어졌다.

  • B2C·개발자 경험 진영. Clerk가 깃발을 들었다. UI 컴포넌트, 호스팅 인증, 잘 만든 React/Next.js 통합, 그리고 "10분 안에 로그인 동작"이라는 약속. Stytch가 패스워드리스·passkey·Fraud SDK로 옆에 섰고, Kinde가 "더 단순한 대안"으로 따라왔다.
  • B2B·엔터프라이즈 진영. WorkOS가 만든 카테고리다. SAML·SCIM·디렉토리 동기화·감사 로그 — 엔터프라이즈가 사달라고 비명을 지르는 모든 기능을 API 한 줄로 파는 회사. Auth0는 여기 있었지만, Okta 인수 후 가격 인상과 정체로 점유율을 잃었다.

그리고 자체 호스팅·OSS 진영에서 2025년 한 해 동안 두 가지 큰 사건이 벌어졌다. Lucia가 죽었다. 메인테이너 pilcrowOnPaper가 2025년 3월에 deprecation을 공식 발표했고, 라이브러리는 2025년 말부터 학습용 리소스로 전환됐다. 그리고 그 자리를 Better Auth가 가져갔다. TypeScript 네이티브·프레임워크 불문·플러그인 아키텍처·자체 호스팅 가능 — 2025년 인디 해커들이 일제히 갈아탔다.

이 글은 이 모든 옵션을 같은 축으로 정면 비교한다. 이론(OIDC·SAML 같은 프로토콜 자체)은 별도 글에 있고, Keycloak 자체 호스팅 핸즈온도 별도 글에 있다. 이 글은 **"무엇을 살까"**에 대한 의사결정 가이드다.

가격은 빠르게 바뀐다. 이 글의 모든 숫자는 2026년 5월 기준이며, 정확한 수치보다 구조에 집중한다. 6개월 뒤 가격이 바뀌어도 결정 프레임은 유효해야 한다.

흐름은 이렇다: 비교 축 → 10개 프로바이더를 한 줄씩 → 기능 매트릭스 → 가격 매트릭스 → 시나리오별 결정 트리 → 자체 호스팅 TCO → Lucia 마이그레이션 → 에필로그.


1장 · 비교 축 — 무엇을 보고 골라야 하는가

같은 축으로 보지 않으면 "Clerk가 더 좋다 vs WorkOS가 더 좋다" 같은 무의미한 싸움이 된다. 다음 8개 축을 모든 프로바이더에 적용한다.

축 1 · 타겟 시장(B2C vs B2B) 누가 사용자인가. 개인 사용자가 가입하는 앱(B2C)인가, 회사가 시트를 사는 SaaS(B2B)인가. 답이 다르면 필요한 기능이 다르다. B2C는 소셜 로그인·패스워드리스·passkey가 중심. B2B는 SSO(SAML/OIDC)·SCIM(자동 프로비저닝)·조직·역할·감사 로그가 중심. 둘 다 잘하는 척하는 프로바이더가 많지만, 실제로는 한쪽에 강하다.

축 2 · 호스팅 모델 완전 SaaS인가, 자체 호스팅 가능인가, 둘 다인가. SaaS는 운영 부담이 없지만 의존성·가격·데이터 주권을 양보한다. 자체 호스팅은 그 반대다. "둘 다 가능"이라는 옵션은 마케팅 문구일 때가 많다 — 실제로 자체 호스팅을 진지하게 지원하는 OSS 회사는 소수다.

축 3 · 가격 모델 MAU(Monthly Active User) 기반인가, 시트 기반인가, 기능 게이트인가. MAU 모델은 B2C에 잔인하다 — 사용자가 늘면 비용이 선형으로 늘어난다. 시트(조직 멤버) 모델은 B2B에 합리적이다. 그리고 "엔터프라이즈 기능"(SAML·SCIM·SSO)을 별도 SKU로 묶어 가격을 5배로 뛰게 하는 패턴은 거의 모든 SaaS 프로바이더의 표준이다.

축 4 · 기능 폭(passkey·MFA·org·SAML·SCIM·passwordless·magic link) 필수: 비밀번호·소셜·세션. 보너스: passkey(WebAuthn)·TOTP·SMS OTP·magic link·passwordless·SAML SSO·SCIM provisioning·B2B 조직·역할/권한·감사 로그·디바이스 관리. 같은 가격대에서 어디까지 들어오는지 확인.

축 5 · DX(개발자 경험) SDK 품질, 문서, 예제, UI 컴포넌트, 프레임워크 통합. Clerk의 강점이 여기. 잘 만든 <SignIn /> 컴포넌트가 30초 안에 동작하는가, 아니면 OIDC 핸드셰이크를 직접 코딩해야 하는가.

축 6 · 통합 깊이(프레임워크·BaaS·이메일·결제) Next.js·Remix·SvelteKit 같은 메타프레임워크에서 first-class인가. Stripe·Resend·Supabase·Vercel과 어떻게 엮이는가. 통합이 좋으면 부수 코드가 줄고, 통합이 없으면 어댑터 레이어를 직접 만든다.

축 7 · 데이터 주권 & 컴플라이언스 사용자 데이터가 어디 저장되는가. EU/일본/한국 리전 옵션이 있는가. SOC2·ISO 27001·HIPAA·GDPR DPA·일본 APPI 대응. 자체 호스팅이면 이게 답이지만, SaaS에서는 회사 본사 위치와 리전 옵션이 결정한다.

축 8 · 이탈 비용(lock-in) 사용자 데이터를 어떻게 export할 수 있는가. 비밀번호 해시는 가져올 수 있는가(SCRAM·bcrypt·argon2 형식이 호환되는가). MAU 비례 가격이 임계점을 넘었을 때 마이그레이션 비용은 얼마인가. 이게 가장 무시되는 축이다. 처음에 작을 때 좋아 보이는 프로바이더가 50만 MAU에서 매년 30만 달러를 내라고 청구서를 보낼 때, "그냥 옮기면 되지"가 사실인지 확인해야 한다.


2장 · 10개 옵션 — 한 줄 정체성과 한 줄 위험

본격 비교 전에 각 프로바이더를 짧게 정리한다.

Clerk — 개발자 경험 1위의 B2C 인증. UI 컴포넌트(<SignIn />, <UserButton />)·B2B Organizations·Backend API. 가격은 Pro 25/월부터시작하고MAU10,000까지무료.SAMLSCIM은비싼EnhancedAuthenticationaddon(25/월 부터 시작하고 MAU 10,000까지 무료. SAML·SCIM은 비싼 Enhanced Authentication add-on(100/월부터). 한 줄 위험: B2C에서 출발해 B2B 기능을 추가하는 중이라, B2B 깊이는 WorkOS에 못 미친다.

WorkOS — "Enterprise OAuth" 카테고리를 만든 회사. SSO·SAML·SCIM·디렉토리 동기화·감사 로그를 API 한 줄로. 가격은 SSO·DSync 각 connection당 $125/월 (월 1,000,000 unit까지 무료 한도). 2026년 AuthKit이 무료 1M MAU까지 풀이며 모든 인증 빌딩블록을 묶었다. 한 줄 위험: B2C 인증(소셜·패스워드)도 되지만, 진짜 가치는 엔터프라이즈 readiness이지 일반 인증이 아니다.

Auth0 (Okta) — 인증 SaaS의 원조이자 거인. 2021년 Okta에 65억 달러로 인수됐다. 모든 기능이 있고, 모든 통합이 있다. 그리고 모든 것에 돈을 낸다. 2026년 가격: B2C Essentials 35/월부터(1,000MAU포함),Pro35/월부터 (1,000 MAU 포함), Pro 240/월 (1,000 MAU), 5,000 MAU에서 약 $1,500/월. B2B 가격은 별도 — Auth0 Organizations·Enterprise Connections는 비싸다. 한 줄 위험: M&A 정체. 신기능 출시가 느려졌고, 가격 인상은 연례 행사다. 새 프로젝트가 Auth0로 시작하는 비율은 2023년부터 떨어지는 추세.

Stytch — Passwordless·passkey·magic link를 가장 잘 만드는 회사. 2024년부터 "Fraud Prevention" SDK를 추가해 봇·계정 탈취·합성 ID 탐지를 ML로. 가격은 B2C 0(10,000MAU까지)0 (10,000 MAU까지)·249/월 (Pro)·B2B는 별도. 한 줄 위험: 카테고리가 좁다. Stytch만으로 모든 인증을 처리할 수도 있지만, 일반 SaaS 인증 시장에서는 Clerk·WorkOS에 비해 인지도가 낮다.

Better Auth — 2025년 인디 시장을 가져간 OSS TypeScript 인증 라이브러리. 프레임워크 불문(Next.js·Nuxt·SvelteKit·Solid·Astro·Hono·Express…), 데이터베이스 어댑터(Drizzle·Prisma·Kysely·MongoDB), 플러그인 아키텍처(passkey·magic link·organization·admin·OIDC provider). MIT 라이선스·자체 호스팅. 한 줄 위험: 라이브러리이지 서비스가 아니다. DB·이메일·세션 저장·운영을 다 직접 한다. Clerk가 주는 30초 onboarding은 여기 없다.

Kinde — "Auth0보다 단순하고 더 싼" 포지셔닝. 호주에서 시작했고 2024-25년 빠르게 성장. UI·B2B 조직·MFA·소셜이 다 있고, 가격이 Auth0의 절반 이하. Pro 25/(10,500MAU),Plus25/월 (10,500 MAU), Plus 89/월 (10,500 MAU + 더 많은 기능). 한 줄 위험: Auth0·Clerk·WorkOS만큼의 생태계·통합·문서 깊이는 아직 부족.

SuperTokens — OSS 자체 호스팅을 진지하게 지원하는 회사. Apache 2.0, Docker로 띄우고 React SDK·Node SDK가 잘 만들어져 있다. 매니지드 SaaS 옵션도 있지만 핵심 정체성은 자체 호스팅. 한 줄 위험: 생태계가 좁다. 일본·한국 커뮤니티는 거의 없고, B2B Organizations·SAML·SCIM 같은 엔터프라이즈 기능은 유료 SaaS 티어에서만.

Supabase Auth — Supabase BaaS와 묶인 인증. Postgres에 사용자 테이블이 살고, RLS(Row Level Security)와 직결된다. Supabase를 이미 쓰는 팀에게는 거의 무료에 가깝다. 가격은 Supabase 가격에 묶여 있다 — Pro $25/월부터. 한 줄 위험: Supabase 안에서만 가치. 별도 백엔드가 있고 Supabase가 아닌 다른 DB를 쓰면 어색하다.

Firebase Auth (Google Identity Platform) — 모바일 앱의 디폴트. Firebase를 쓰는 모든 팀이 그냥 쓴다. 가격은 50,000 MAU까지 무료, 그 위는 MAU당 $0.0055-0.0025. 한 줄 위험: Vendor lock-in이 강하다. Google Cloud 안에서만 진짜로 매끄럽고, 다른 백엔드에서는 Admin SDK로 빈약하게 연동.

Auth.js (NextAuth) — Next.js의 사실상 표준 인증 라이브러리. v5에서 이름이 바뀌고 프레임워크 중립으로 확장. OSS·자체 호스팅·DB는 본인이 준비. 한 줄 위험: 라이브러리이지 서비스가 아니다(Better Auth와 같은 카테고리). 깊이는 있지만 학습곡선이 있고, 세션·DB 어댑터·콜백을 직접 이해해야 한다. 2025-26년 Better Auth로의 이탈이 가시화됐다.

Logto — OSS 자체 호스팅 정체성 플랫폼. MIT 라이선스, OIDC·OAuth2·SAML 지원, Console UI 제공. Cloud 옵션도 있다. 한 줄 위험: 후발주자라 생태계·통합 깊이는 Keycloak·SuperTokens에 비해 얕다.

Lucia (deprecated) — TypeScript 네이티브 세션 라이브러리로 사랑받았지만, 메인테이너가 2025년 3월에 deprecation을 공식 발표. 새 프로젝트에서는 사용 금지. 기존 프로젝트는 Better Auth·Auth.js·Arctic(같은 메인테이너의 후속작)으로 마이그레이션 필요.


3장 · 기능 매트릭스 — 한 표로 정리

각 프로바이더가 무엇을 무료/기본 티어에서 제공하는지. "있다·없다·유료 add-on" 셋 중 하나.

기능ClerkWorkOSAuth0StytchBetter AuthKindeSuperTokensSupabaseFirebaseAuth.js
Email/Password있음있음있음있음있음있음있음있음있음있음
Social Login있음있음있음있음있음있음있음있음있음있음
Magic Link있음있음있음핵심플러그인있음있음있음부분있음
Passkey/WebAuthn있음있음있음핵심플러그인있음있음베타베타베타
TOTP MFA있음있음있음있음플러그인있음있음있음있음부분
SMS OTP있음있음있음있음플러그인있음있음있음있음부분
UI 컴포넌트강함강함(AuthKit)있음있음약함있음있음있음약함없음
B2B Organizations있음강함유료있음플러그인있음유료부분부분부분
SAML SSO유료핵심유료있음플러그인유료유료유료없음직접
SCIM Provisioning유료핵심유료있음없음유료유료없음없음없음
Audit Logs부분핵심유료있음플러그인부분부분있음부분직접
자체 호스팅불가불가사실상 불가불가핵심불가가능가능불가가능
Open Source비공개비공개비공개비공개MIT비공개Apache 2.0Apache 2.0비공개MIT
Fraud/Bot 탐지부분부분유료핵심없음부분없음없음부분없음
일본·한국 리전US/EUUS/EUUS/EU/JPUS/EU호스팅 본인US/EU/AU호스팅 본인다중다중호스팅 본인

읽는 법: 매트릭스만 보고 결정하지 마라. "기능 있음"이 "프로덕션 품질"을 보장하지 않는다. Clerk의 SAML과 WorkOS의 SAML은 같은 단어이지만 깊이가 다르다. WorkOS는 카테고리를 정의한 회사고, Clerk는 add-on으로 붙였다.


4장 · 가격 매트릭스 — 실제 청구서 시뮬레이션

추상적인 가격표는 의미 없다. 세 가지 실제 시나리오에서 월 청구서가 얼마인지 시뮬레이션.

시나리오 A · B2C 소비자 앱 (50,000 MAU, MFA·passkey·소셜만)

프로바이더월 청구서 (추정)메모
Clerk약 $250Pro 25+MAU초과분(10K무료후MAU25 + MAU 초과분 (10K 무료 후 MAU당 0.02)
WorkOS AuthKit$01M MAU 무료 (2026년 정책)
Auth0 B2C Pro약 $1,500-2,5005,000 MAU 가격대만 해도 이미 $1,500
Stytch약 $400-800Pro $249 + MAU 초과
Better Auth$0 + 호스팅비라이브러리 무료, DB·서버 비용만
Kinde약 $89-200Plus $89 + MAU 추가
SuperTokens 자체$0 + 호스팅비OSS, 운영 인건비는 별도
Supabase Auth$25-100Supabase Pro 안에 포함
Firebase Auth$050,000 MAU 무료 한도
Auth.js 자체$0 + 호스팅비OSS, DB·이메일 본인

해석: B2C 50K MAU만 보면 WorkOS AuthKit·Firebase·Supabase가 압도적으로 싸다. 라이브러리(Better Auth·Auth.js)는 라이선스 비용 0이지만 운영비를 잊으면 안 된다(다음 장).

시나리오 B · B2B SaaS (200 고객사, 평균 50 시트, SAML 30%·SCIM 10%)

프로바이더월 청구서 (추정)메모
Clerk + Enhanced Auth약 $200-400Pro + Enhanced Authentication add-on($100/월 + SAML 사용량)
WorkOS약 $7,500-8,000SSO connection 60개 × 125=125 = 7,500
Auth0 B2B$5,000-15,000Enterprise Connections·Organizations는 견적제
Stytch B2B$499/월 + add-onSAML·SCIM 포함된 B2B 티어
Better Auth$0 + 호스팅비플러그인으로 SSO·SAML·SCIM 직접 구현
Kinde Plus$89/월 + 사용량SAML add-on 별도
SuperTokens Pro약 $300-500자체 호스팅 + 일부 유료 기능
Supabase부적합B2B SSO·SCIM 약함
Firebase부적합B2B SAML 없음
Auth.js$0 + 호스팅비SAML·SCIM은 사실상 직접 구현

해석: B2B SAML이 많아지면 WorkOS의 connection 가격이 무섭게 늘어난다. 그래도 "한 SAML 연결을 직접 구현하는 인건비"보다는 싸다(IdP별 호환성 디버깅에 보통 1-2주). Clerk의 Enhanced Authentication이 절대 가격에서는 가장 싸 보이지만, 깊이·디렉토리 동기화 품질에서 WorkOS와 차이가 있다.

시나리오 C · 글로벌 소비자 앱 (500,000 MAU)

프로바이더월 청구서 (추정)
Clerk$5,000-10,000+
WorkOS AuthKit약 $0-수백 (1M MAU 무료 한도 내)
Auth0 B2C$20,000-40,000+
Stytch$5,000-10,000
Better Auth약 $200-2,000 (DB·서버 비용)
Firebase Auth약 $1,500-2,500 (MAU 단가)
Supabase약 $1,000+ (DB·트래픽)

해석: 50만 MAU 구간이 거의 모든 MAU 기반 SaaS의 임계점이다. Clerk·Auth0·Stytch에서 청구서가 무서워진다. 이 구간에서는 자체 호스팅(Better Auth + Postgres) 또는 WorkOS AuthKit(현재 정책 한도 내) 또는 Firebase가 합리적이다.

가격은 2026년 5월 공식 가격 페이지·릴리즈 정보를 토대로 한 추정이며, 실제 청구서는 add-on·support·overage에 따라 ±50% 변동 가능. 정확한 견적은 본인 워크로드로 직접 받아야 한다.


5장 · 의사결정 트리 — 어떤 걸 골라야 하는가

8개 축·10개 옵션·3개 가격 시나리오를 보고도 결정이 안 된다면, 정직한 트리는 이렇다.

[질문 1] B2C인가 B2B인가 둘 다인가?
   ├── 순수 B2C → 질문 2
   ├── 순수 B2B → 질문 4
   └── 둘 다 → 질문 3

[질문 2] B2C: 예상 1년 후 MAU는?
   ├── 1만 미만 → Clerk Pro 또는 Better Auth·Auth.js (취향)
   ├── 1만-10만 → Clerk·Stytch·Kinde 중 DX 취향 / Better Auth 자체 호스팅
   └── 10만+ → WorkOS AuthKit · Firebase · Better Auth 자체 호스팅 (Clerk·Auth0는 비쌈)

[질문 3] 하이브리드: 진짜로 B2B를 신경 쓰는가?
   ├── B2B는 "있으면 좋음" → Clerk + Enhanced Auth 또는 Kinde
   └── B2B가 매출의 50%+ → WorkOS (B2C는 AuthKit으로 같이 해결)

[질문 4] B2B: 엔터프라이즈 고객 비중은?
   ├── SMB·미드마켓 위주 → Clerk·Kinde·Auth0 Pro
   └── 엔터프라이즈·SAML·SCIM 필수 → WorkOS (압도적) 또는 Auth0 B2B (예산 있으면)

[질문 5] 자체 호스팅 요건이 있는가?
   ├── 데이터 주권·온프레미스 의무 → Keycloak (별도 글) 또는 SuperTokens·Logto
   ├── 풀스택 TS 팀이고 작게 시작 → Better Auth
   └── Next.js + DB 자유롭게 다룸 → Better Auth (Auth.js v5보다 우세)

핵심 결정 휴리스틱 6가지:

  1. B2B 엔터프라이즈가 매출의 50%+ → WorkOS가 1지망. 다른 답은 거의 없다. SAML·SCIM·디렉토리 동기화의 깊이가 다른 카테고리다.
  2. 개인 개발자·인디·작은 팀 + Next.js → Clerk 또는 Better Auth. 둘 중 하나로 좁히고, Clerk는 "관리하기 싫음", Better Auth는 "OSS·자체 호스팅·DB 자유".
  3. 이미 Supabase·Firebase를 쓰면 → 같은 BaaS의 Auth를 쓴다. 별도 인증을 끼우면 RLS·세션이 어색해진다.
  4. 새 프로젝트가 Auth0로 시작할 이유는 거의 없다. 같은 가격대에서 Clerk·Stytch·WorkOS가 거의 모든 면에서 낫다.
  5. MAU가 50만이 넘어갈 가능성이 높으면 → Clerk·Auth0·Stytch의 청구서를 미리 시뮬레이션해야 한다. 청구서가 무서워졌을 때 옮기는 비용이 더 무섭다.
  6. Lucia를 쓰고 있다면 → 지금 마이그레이션 계획을 세워라. 9장 참고.

6장 · 자체 호스팅 TCO — 진짜 싼가

"우리 인증을 직접 만들자" 또는 "Keycloak·SuperTokens·Better Auth를 자체 호스팅하자"는 결정은 거의 항상 첫 해의 청구서를 보고 나온다. SaaS Auth0가 월 5,000달러를 보냈는데, Keycloak은 EC2 인스턴스 한 대 100달러면 되니까. 정말 그런가.

5년 TCO를 분해해보자.

SaaS 측 비용 (Clerk·Auth0 B2C 등):

  • 라이선스: MAU별 청구서. 10만 MAU 기준 연 2만-10만 달러.
  • 인건비: 거의 0. 통합 첫 주에 한 명이 일주일.
  • 운영 부담: 0. 다운타임은 그쪽 SLA.
  • 마이그레이션 비용: lock-in. 옮기려면 비밀번호 해시·소셜 연결·세션을 어떻게 export하는지 확인 필요.

자체 호스팅 측 비용 (Keycloak·SuperTokens·Better Auth):

  • 라이선스: 0.
  • 인프라: 인스턴스·DB·로드밸런서·백업. 진지하게 HA·다중 리전이면 월 500-2,000달러.
  • 인건비: 초기 셋업 + 운영. 이게 거대하다. SRE 한 명의 시간 0.1-0.3 FTE. 패치·업그레이드·이슈 트러블슈팅·SAML 디버깅. 연간 인건비로 2-6만 달러.
  • 보안 부담: 본인이 진다. CVE 대응·패치·취약점 점검. 0-day가 터지면 그날 밤이 사라진다.
  • 컴플라이언스: SOC2·ISO27001 감사를 받을 때 인증 시스템도 함께 받는다. 별도 노력.

5년 누적, 10만 MAU 기준 B2C 앱의 매우 단순화한 시뮬레이션:

Clerk Pro + MAU 추가:
  연 평균 4만 달러 × 5년 = 20만 달러
  인건비 (운영) = 5K (통합 작업) + 거의 0 (운영) = 5K
  합계: 약 20.5만 달러

Better Auth 자체 호스팅:
  라이선스: 0
  인프라: 월 800달러 × 60개월 = 4.8만 달러
  인건비: 0.2 FTE × 5년 × 15만 달러/년 = 15만 달러
  합계: 약 20만 달러

놀라운 결과: 5년 TCO가 비슷하게 나온다. 자체 호스팅이 "공짜"가 아니다. 인건비를 정직하게 계산하면 SaaS와 거의 같다. SaaS가 이길 때: 인증이 핵심 비즈니스가 아니고, 작은 팀이고, 운영 시간을 다른 데 쓰고 싶을 때. 자체 호스팅이 이길 때: 데이터 주권 요건, 1M MAU+ 구간, 인증을 깊이 커스터마이즈해야 할 때, 이미 인증을 잘 운영할 SRE가 있을 때.


7장 · Clerk vs WorkOS — 가장 자주 묻는 비교

가장 자주 받는 질문이다. 둘 다 잘 만든 회사이고, 카테고리가 다르다.

Clerk가 이기는 경우:

  • 풀스택·B2C·Next.js 우선.
  • <SignIn />·<UserButton /> 같은 UI 컴포넌트로 30초 만에 화면을 만들고 싶다.
  • 조직 기능은 "있으면 좋음" 수준.
  • 작은 팀·인디·스타트업 초기.

WorkOS가 이기는 경우:

  • B2B SaaS이고 엔터프라이즈 고객이 매출의 큰 비중.
  • SAML·SCIM이 사실상 필수 (Okta·Azure AD·OneLogin·Google Workspace 연결).
  • 자체 회원가입 UI는 이미 있고, 엔터프라이즈 readiness만 추가하고 싶음.
  • 또는 새 프로젝트인데 처음부터 AuthKit(WorkOS의 hosted 로그인)을 쓰면 1M MAU까지 무료라서 매력적.

둘 다 쓰는 경우도 있다. 일부 회사는 B2C 부분에 Clerk를, 엔터프라이즈 connection에 WorkOS를 같이 쓴다. 깔끔하진 않지만 가능하다.

2026년 변화: WorkOS AuthKit이 SAML·SCIM 외에도 소셜·패스워드리스·passkey를 다 포함하는 hosted UI로 진화하면서 Clerk의 영역과 겹치기 시작했다. 1M MAU 무료 정책으로 인디·스타트업도 끌어들이는 중. Clerk는 반대 방향으로 B2B Organizations·Enhanced Authentication을 키워 WorkOS 쪽으로 침투. 카테고리 경계가 흐려지고 있다.


2026년 새 프로젝트는 "비밀번호 로그인"이 디폴트가 아니다. 디폴트는 셋 중 하나.

  • passkey(WebAuthn). 디바이스 또는 1Password·Bitwarden 같은 패스워드 매니저에 저장되는 공개키. iCloud Keychain·Google Password Manager가 디바이스 간 동기화. 사용자가 "비밀번호를 기억"할 필요가 없다. UX 최강·보안 최강.
  • Magic link. 이메일로 일회용 링크를 보내고 클릭하면 로그인. UX는 매우 단순하지만, 이메일 전달 지연·이메일 인증 자체에 대한 회의가 있다.
  • OTP(이메일 또는 SMS). 6자리 코드. SMS는 SIM swap 위험과 통신 비용 때문에 권장도가 떨어지는 추세.

2026년 추세는 passkey 우선·magic link 백업·SMS 폐지다. Apple·Google·Microsoft가 모두 passkey를 OS 레벨에서 지원하면서 디바이스 채택률이 80% 이상에 도달했고, 사용자 학습곡선도 사라지는 중이다.

각 프로바이더의 passkey 깊이:

프로바이더passkey 지원
Stytch핵심 카테고리·최고 깊이
Clerk안정적 일급 지원
WorkOS AuthKit안정적 일급 지원
Auth0일급 지원
Kinde일급 지원
Better Authpasskey 플러그인 (안정)
SuperTokens일급 지원
Supabase베타
Firebase베타·플랫폼별 차이
Auth.js베타·어댑터 의존

magic link는 거의 모든 프로바이더에 있다. 차이는 이메일 전달성·템플릿 커스터마이즈·재전송 로직·attempt rate limiting 같은 디테일에서 갈린다.


9장 · Lucia 마이그레이션 — 무엇을 어디로

Lucia의 메인테이너 pilcrowOnPaper가 2025년 3월에 다음 메시지를 공식 발표했다.

  • Lucia는 "라이브러리"로서의 유지보수가 끝난다.
  • 그가 작성한 인증 학습 가이드는 GitHub에서 무료 학습 리소스로 유지된다.
  • 그가 작성한 OAuth 클라이언트 라이브러리 Arctic은 계속 유지·활성 개발 중.
  • 새 프로젝트는 다른 라이브러리(또는 직접 구현)를 권장.

마이그레이션 옵션:

옵션 1 · Better Auth로 — Lucia의 정신적 후계자. TypeScript 네이티브·세션 기반·DB 어댑터·플러그인. 사용자 테이블·세션 테이블 스키마가 비슷하고 (id·user_id·expires_at), 이메일+패스워드 흐름도 비슷. 2025-26년의 가장 인기 있는 이주 경로.

옵션 2 · Auth.js v5로 — Next.js 중심이라면. 어댑터 API가 다르고, 콜백 모델·세션 처리도 달라서 변환이 좀 더 크다.

옵션 3 · Arctic + 본인 세션 관리 — Lucia에서 OAuth 부분만 분리. 세션은 본인 DB·쿠키로 직접 관리. "Lucia 가이드 정신"을 그대로 유지하는 경로. 학습 코스트는 가장 낮지만 코드 베이스에 흩어진 세션 관리 코드를 인정해야 한다.

옵션 4 · Clerk·WorkOS 같은 SaaS로 — Lucia의 직접 관리 비용이 부담이라면. 비밀번호 해시 형식 호환성 확인 필수. argon2·bcrypt 형식의 import는 대부분 지원되지만, SCRAM·이전 Lucia의 SHA-256 같은 변형은 직접 마이그레이션 스크립트가 필요할 수 있다.

마이그레이션 체크리스트:

  • 사용자 테이블 export → 새 스키마로 import.
  • 비밀번호 해시 형식 호환성 검증.
  • 세션 토큰·쿠키 이름 변경·과거 세션 무효화 정책.
  • 이메일 인증·재설정 토큰 처리.
  • 소셜 연결 (OAuth provider별 user_id 매핑) 보존.
  • 점진 이주 (dual-write) vs 빅뱅 컷오버 선택.

10장 · NextAuth(Auth.js) vs Better Auth — Next.js 라이브러리 선택

자체 호스팅 라이브러리를 선택하면 둘 중 하나로 좁혀진다.

Auth.js (구 NextAuth) — 오래된 안정성·큰 사용자 베이스·많은 통합. v5에서 auth() 헬퍼·App Router 친화·@auth/core로 프레임워크 중립화. 단점: 콜백 API가 복잡(signIn·session·jwt)하고, DB 어댑터 별로 동작이 미묘하게 다름. 깊이 들어가면 학습곡선이 가파르다.

Better Auth — 2024년 등장·2025-26년 폭발적 성장. API가 더 직관적이고, 플러그인 시스템이 깔끔하며, DB 스키마 자동 생성·CLI 도구 제공. TypeScript 타입 추론이 더 강력. Drizzle·Prisma·Kysely·MongoDB 어댑터. Next.js·Nuxt·SvelteKit·Solid·Astro·Hono·Express·Tanstack Start 모두 일급.

선택 기준:

  • 이미 Auth.js를 쓰고 있고 동작이 만족스럽다면 → 굳이 옮길 이유 없음.
  • 새 프로젝트라면 → Better Auth가 우세. DX·플러그인 시스템·문서가 더 좋다.
  • 멀티 프레임워크(Next.js 외에도 SvelteKit·Hono 등)에서 같은 인증을 써야 한다면 → Better Auth.

2026년 현재 npm 트렌드: Auth.js는 안정적 사용 유지, Better Auth는 폭발적으로 성장 중. Auth.js 메인테이너도 Better Auth의 일부 디자인 결정을 차용하는 움직임이 있다.


11장 · 안티패턴 — 자주 보는 실수 10가지

지난 1년 코드리뷰·기술 컨설팅에서 본 실제 실수들.

  1. JWT를 세션 대신 쓰면서 revoke가 없다. Access token TTL 24시간 + revoke 없음 = 해고된 직원이 하루 종일 API를 호출할 수 있다. 짧은 TTL + refresh + revoke 리스트 또는 세션 기반으로.
  2. Auth0를 쓰면서 모든 기능을 직접 구현. 가입 폼·이메일 전송·MFA를 다 직접 만들면 Auth0를 산 이유가 없다. Universal Login 또는 SDK 위젯을 쓰라.
  3. Clerk·Stytch에서 마이그레이션 비용을 0으로 가정. "MAU 늘면 다른 데로 옮기지" — 정말로 비밀번호 해시·소셜 연결·세션을 export할 수 있는지 사전 확인.
  4. WorkOS를 SAML 없는데 비싸게 사기. WorkOS의 1순위 가치는 엔터프라이즈 SSO. SAML·SCIM이 없으면 WorkOS의 가치 절반을 안 쓰는 셈.
  5. Supabase Auth + 별도 Postgres. Supabase Auth는 Supabase Postgres에 사용자 테이블이 살아야 RLS·트리거가 자연스럽다. 다른 DB에 가입 정보를 옮기면 어색해진다.
  6. passkey를 추가했지만 백업 fallback이 없다. 디바이스를 잃은 사용자는 잠긴다. magic link 또는 복구 코드 백업 흐름이 반드시 필요.
  7. SAML 디버깅을 자체 구현으로 시도. Okta·Azure AD·OneLogin·Google Workspace 각자의 quirk가 있고, IdP-initiated vs SP-initiated 흐름이 다르다. 2주 동안 진흙탕에 들어가게 된다. WorkOS가 비싼 이유.
  8. MAU 가격을 회사 자체 MAU 정의와 일치시키지 않음. 프로바이더의 MAU 정의(예: 월에 한 번이라도 로그인한 사용자, 또는 세션이 만료되지 않은 사용자)와 내 비즈니스의 MAU가 다를 수 있다. 가입자 100만이지만 실제 활성 5만이면 청구서가 다르다.
  9. passkey를 "추가했다"고만 하고 측정하지 않음. 실제 사용률은 가입 흐름·UI 카피·iOS/Android 비율에 크게 좌우된다. 측정·실험 없이 "있음" 체크박스만 채우면 ROI가 의심.
  10. Lucia를 쓰면서 마이그레이션 계획이 없다. 1년 안에 의무가 된다. 미루지 말 것.

에필로그 — 결정 체크리스트와 다음 글 예고

결정 체크리스트

  • 타겟 시장 명확화: B2C·B2B·하이브리드 중 어디?
  • 1년·3년 예상 MAU 시뮬레이션.
  • 엔터프라이즈 고객 비중·SAML·SCIM 의무 여부.
  • 자체 호스팅 vs SaaS 의사결정 (TCO 5년 비교).
  • passkey·magic link·MFA 정책.
  • 마이그레이션 비용 사전 평가 (lock-in 축).
  • 데이터 주권·리전 요건 (특히 EU·한국·일본).
  • 컴플라이언스 요구 (SOC2·ISO27001·HIPAA·GDPR·APPI).
  • 운영 부담 vs 인건비 솔직한 평가.
  • 그리고 가장 중요한 것: "제일 안 좋아 보이는 옵션은 직접 만드는 것이다" — 2년 후 후회한다.

안티패턴 요약

  • 인증을 직접 만든다.
  • MAU 가격을 처음에만 계산하고 1년 후를 안 본다.
  • Auth0를 디폴트로 선택한다(2026년에는 더 이상 디폴트가 아니다).
  • 자체 호스팅을 "공짜"라고 가정한다.
  • passkey를 추가하지만 측정·fallback 없음.

다음 글 예고

  • "WorkOS AuthKit 핸즈온 — Next.js에 1M MAU 무료 인증 30분 셋업"
  • "Better Auth 풀스택 셋업 — Drizzle·Postgres·Resend·passkey 플러그인 가이드"
  • "엔터프라이즈 SAML 디버깅 — Okta·Azure AD·OneLogin·Google Workspace 호환성 매트릭스"
  • "인증 마이그레이션 — 비밀번호 해시 호환성과 점진 컷오버 패턴"

다음 프로젝트의 인증을 결정해야 한다면, 이 글의 8개 축·10개 옵션·결정 트리를 이용해 30분 안에 후보를 두세 개로 좁혀라. 그리고 그 두세 개의 가격 페이지를 직접 펼쳐 본인 워크로드로 실제 견적을 받아라. 추측으로 인증을 결정하지 말 것.


참고 / References

Auth Provider Shootout 2026 — Clerk vs WorkOS vs Auth0 vs Stytch vs Better Auth vs Kinde vs SuperTokens, plus the NextAuth and Lucia post-mortem

Prologue — The Era of Buying Authentication

The auth market in May 2026 looks nothing like it did five years ago. In 2021 the choice was "Auth0, Cognito, or roll your own." Today the same question has at least ten answers, each with a different price, operational burden, and feature set.

The market has split in two directions.

  • B2C / developer-experience camp. Clerk planted the flag. UI components, hosted auth, polished React/Next.js integration, and the promise of "working login in 10 minutes." Stytch sits beside it with passwordless, passkeys, and a Fraud SDK; Kinde tags along as the "simpler alternative."
  • B2B / enterprise-readiness camp. WorkOS invented this category. SAML, SCIM, directory sync, audit logs — every feature that enterprise buyers scream for, packaged as an API call. Auth0 used to live here but has been losing ground since the Okta acquisition due to price hikes and stagnation.

Meanwhile, two major events shook the self-hosted / OSS world during 2025. First, Lucia died. Maintainer pilcrowOnPaper officially announced the deprecation in March 2025; the library transitioned into a learning resource by late 2025. And the empty seat was taken by Better Auth: TypeScript-native, framework-agnostic, plugin architecture, self-hostable. Indie hackers migrated en masse during 2025.

This post compares every one of those options on the same axes. The theory pieces (OIDC, SAML protocols themselves) and the Keycloak self-hosting hands-on live in separate posts. This one is about what to buy.

Pricing changes fast. Every number here is May 2026 reference data; focus on structure, not exact figures. The framework needs to survive even if the prices move 6 months from now.

Flow: comparison axes → ten providers in one line each → feature matrix → pricing matrix → scenario-based decision tree → self-hosting TCO → Lucia migration → epilogue.


Chapter 1 · The Eight Axes — What You're Actually Choosing

Without a shared framework, this becomes "Clerk is better vs WorkOS is better" — a meaningless argument. Apply these eight axes to every provider.

Axis 1 · Target market (B2C vs B2B) Who is your user? An individual signing up directly (B2C), or a company buying seats (B2B SaaS)? Different answers mean different required features. B2C centers on social login, passwordless, and passkeys. B2B centers on SSO (SAML/OIDC), SCIM (auto-provisioning), organizations, roles, and audit logs. Many providers claim to do both well; in reality, each leans one way.

Axis 2 · Hosting model Pure SaaS, self-hostable, or both? SaaS removes the operational burden but trades away dependency, price, and data sovereignty. Self-hosting flips that trade. "Both" is often a marketing claim — few OSS companies seriously support self-hosting as a first-class path.

Axis 3 · Pricing model Per-MAU (Monthly Active User), per-seat, or feature-gated? MAU pricing is brutal for B2C apps — costs grow linearly with users. Per-seat (per organization member) makes sense for B2B. And the pattern of bundling "enterprise features" (SAML, SCIM, SSO) into a separate SKU that 5x's the bill is now standard across nearly every SaaS provider.

Axis 4 · Feature breadth (passkeys, MFA, organizations, SAML, SCIM, passwordless, magic links) Required: email/password, social, sessions. Bonus: passkey/WebAuthn, TOTP, SMS OTP, magic link, passwordless, SAML SSO, SCIM provisioning, B2B organizations, roles/permissions, audit logs, device management. At the same price tier, see what's included vs an upgrade.

Axis 5 · DX (developer experience) SDK quality, docs, examples, UI components, framework integrations. This is Clerk's home turf. Does a <SignIn /> component just work in 30 seconds, or do you hand-code the OIDC handshake?

Axis 6 · Integration depth (frameworks, BaaS, email, billing) Is it first-class in Next.js, Remix, SvelteKit? How does it tie into Stripe, Resend, Supabase, Vercel? Good integration cuts boilerplate; no integration means you ship adapter layers yourself.

Axis 7 · Data sovereignty and compliance Where does user data live? EU / Japan / Korea region options? SOC2, ISO 27001, HIPAA, GDPR DPAs, Japan APPI compliance. Self-hosting answers this trivially; for SaaS, the company headquarters and region availability determine it.

Axis 8 · Switching cost (lock-in) Can you export user data? Are password hashes portable (SCRAM, bcrypt, argon2 — is the format compatible)? When MAU-based pricing crosses your pain threshold, what does the migration actually cost? This is the most ignored axis. Providers that look cheap at low MAU sometimes bill 300k a year at 500k MAU — and "we'll just switch" may not be as easy as you think.


Chapter 2 · Ten Options — One-Line Identity, One-Line Risk

Quick rundown before the deep comparison.

Clerk — B2C auth with the best developer experience. UI components (<SignIn />, <UserButton />), B2B Organizations, Backend API. Pricing starts at Pro 25/monthwith10,000MAUfree;SAMLandSCIMliveinanEnhancedAuthenticationaddonstartingat25/month with 10,000 MAU free; SAML and SCIM live in an Enhanced Authentication add-on starting at 100/month. One-line risk: Clerk grew out of B2C and is adding B2B features; the B2B depth doesn't yet match WorkOS.

WorkOS — The company that invented the "Enterprise OAuth" category. SSO, SAML, SCIM, directory sync, audit logs delivered through a single API. Pricing has historically been per-connection ($125/month per SSO and per DSync connection), with a 1,000,000 unit monthly free allowance. In 2026, AuthKit (their hosted login UI) became free up to 1M MAU and bundled every auth building block. One-line risk: it also does B2C (social, password), but the real value lies in enterprise readiness, not plain auth.

Auth0 (Okta) — The SaaS-auth original and giant. Acquired by Okta for 6.5Bin2021.Haseveryfeature,everyintegration,andchargesforallofit.2026pricing:B2CEssentialsstartsat6.5B in 2021. Has every feature, every integration, and charges for all of it. 2026 pricing: B2C Essentials starts at 35/month for 1,000 MAU; Pro at 240/monthfor1,000MAU;5,000MAUrunsabout240/month for 1,000 MAU; 5,000 MAU runs about 1,500/month already. B2B Enterprise Connections and Organizations are priced separately and expensive. One-line risk: post-acquisition stagnation. New feature velocity slowed, price hikes have become an annual event. The share of new projects starting on Auth0 has dropped steadily since 2023.

Stytch — Best-in-class passwordless, passkey, and magic link. Since 2024 they shipped a Fraud Prevention SDK using ML to detect bots, account takeover, and synthetic identity. B2C 0upto10,000MAUand0 up to 10,000 MAU and 249/month for Pro; B2B priced separately. One-line risk: narrower category. You can do all your auth with Stytch, but in the general SaaS-auth conversation Clerk and WorkOS get more airtime.

Better Auth — The OSS TypeScript auth library that ate the indie market in 2025. Framework-agnostic (Next.js, Nuxt, SvelteKit, Solid, Astro, Hono, Express...), DB adapters (Drizzle, Prisma, Kysely, MongoDB), plugin architecture (passkey, magic link, organization, admin, OIDC provider). MIT-licensed and self-hostable. One-line risk: it's a library, not a service. You own the DB, the email sending, the session store, and the operations. The 30-second Clerk onboarding doesn't exist here.

Kinde — Positions itself as "simpler and cheaper than Auth0." Australian-origin, grew quickly through 2024-25. Ships UI, B2B organizations, MFA, and social — at less than half the Auth0 price. Pro 25/monthfor10,500MAU;Plus25/month for 10,500 MAU; Plus 89/month for the same MAU plus more features. One-line risk: ecosystem, integrations, and doc depth still trail Auth0, Clerk, and WorkOS.

SuperTokens — Takes OSS self-hosting seriously. Apache 2.0 license, Docker-deployable, well-built React and Node SDKs. There's a managed SaaS tier, but the core identity is self-hosted. One-line risk: smaller ecosystem. Japanese and Korean communities are nearly nonexistent, and B2B Organizations, SAML, and SCIM are paywalled into the managed SaaS tier.

Supabase Auth — Bundled with the Supabase BaaS. User records live in Postgres and tie directly into Row Level Security. For teams already using Supabase, it's nearly free. Pricing rolls up into Supabase's plan (Pro $25/month and up). One-line risk: only valuable inside the Supabase stack. With a separate backend on a different DB, it feels off.

Firebase Auth (Google Identity Platform) — The default for mobile apps. Every Firebase team uses it. Free up to 50,000 MAU; above that, $0.0055-0.0025 per MAU. One-line risk: heavy vendor lock-in. Smooth only inside Google Cloud; integration from non-Firebase backends through Admin SDK feels thin.

Auth.js (NextAuth) — The de facto Next.js auth library. v5 renamed and went framework-neutral. OSS, self-hosted, BYO database. One-line risk: it's a library, not a service (same category as Better Auth). Has depth but a steep learning curve — sessions, DB adapters, and callbacks all need to be understood. 2025-26 has shown a noticeable migration toward Better Auth.

Logto — OSS self-hosted identity platform. MIT-licensed, supports OIDC, OAuth2, and SAML, ships a Console UI. Also has a Cloud option. One-line risk: as a newer entrant, ecosystem and integration depth trail Keycloak and SuperTokens.

Lucia (deprecated) — Beloved TypeScript-native session library, but the maintainer announced deprecation in March 2025. Do not use for new projects. Existing projects need to migrate — see Better Auth, Auth.js, or Arctic (the maintainer's successor for OAuth clients).


Chapter 3 · Feature Matrix — One Table

What each provider includes at the free or default tier. "Yes", "No", or "paid add-on" only.

FeatureClerkWorkOSAuth0StytchBetter AuthKindeSuperTokensSupabaseFirebaseAuth.js
Email/PasswordYesYesYesYesYesYesYesYesYesYes
Social LoginYesYesYesYesYesYesYesYesYesYes
Magic LinkYesYesYesCorePluginYesYesYesPartialYes
Passkey/WebAuthnYesYesYesCorePluginYesYesBetaBetaBeta
TOTP MFAYesYesYesYesPluginYesYesYesYesPartial
SMS OTPYesYesYesYesPluginYesYesYesYesPartial
UI ComponentsStrongStrong (AuthKit)YesYesWeakYesYesYesWeakNone
B2B OrganizationsYesStrongPaidYesPluginYesPaidPartialPartialPartial
SAML SSOPaidCorePaidYesPluginPaidPaidPaidNoneDIY
SCIM ProvisioningPaidCorePaidYesNonePaidPaidNoneNoneNone
Audit LogsPartialCorePaidYesPluginPartialPartialYesPartialDIY
Self-hostingNoNoEffectively NoNoCoreNoYesYesNoYes
Open SourceClosedClosedClosedClosedMITClosedApache 2.0Apache 2.0ClosedMIT
Fraud/Bot detectionPartialPartialPaidCoreNonePartialNoneNonePartialNone
JP / KR regionUS/EUUS/EUUS/EU/JPUS/EUYour hostUS/EU/AUYour hostMultiMultiYour host

How to read this: do not decide from the matrix alone. "Has feature" does not equal "production quality." Clerk's SAML and WorkOS's SAML use the same word but differ in depth. WorkOS defined this category; Clerk added it as a side feature.


Chapter 4 · Pricing Matrix — Three Real Bills

Abstract price tables are useless. Three real scenarios, with monthly bills.

Scenario A · B2C consumer app (50,000 MAU, MFA + passkey + social only)

ProviderEstimated monthly billNote
Clerk~$250Pro 25+MAUoverage(10Kfree,then 25 + MAU overage (10K free, then ~0.02 per MAU)
WorkOS AuthKit$01M MAU free (2026 policy)
Auth0 B2C Pro~$1,500-2,500Already ~$1,500/month at the 5K MAU price level
Stytch~$400-800Pro $249 + MAU overage
Better Auth$0 + hostingLibrary is free, you pay for DB + servers
Kinde~$89-200Plus $89 + MAU
SuperTokens self-hosted$0 + hostingOSS, ops time billed separately
Supabase Auth$25-100Inside Supabase Pro
Firebase Auth$050,000 MAU under free tier
Auth.js self-hosted$0 + hostingOSS, BYO DB and email

Reading: at 50K MAU B2C, WorkOS AuthKit, Firebase, and Supabase dominate on price. Libraries (Better Auth, Auth.js) are zero in licensing, but do not forget operational cost (next chapter).

Scenario B · B2B SaaS (200 customer companies, ~50 seats each, 30 percent SAML, 10 percent SCIM)

ProviderEstimated monthly billNote
Clerk + Enhanced Auth~$200-400Pro + Enhanced Authentication add-on ($100/month + SAML usage)
WorkOS~$7,500-8,00060 SSO connections at 125=125 = 7,500
Auth0 B2B$5,000-15,000Enterprise Connections + Organizations are quote-based
Stytch B2B$499/month + add-onSAML/SCIM bundled in B2B tier
Better Auth$0 + hostingDIY SSO, SAML, SCIM via plugins
Kinde Plus$89/month + usageSAML add-on extra
SuperTokens Pro~$300-500Self-hosted + some paid features
SupabaseUnsuitableB2B SSO/SCIM are weak
FirebaseUnsuitableNo B2B SAML
Auth.js$0 + hostingSAML/SCIM are effectively DIY

Reading: at scale, WorkOS connection prices add up fast. Still cheaper than the ops cost of implementing a single SAML connection from scratch (debugging IdP quirks usually eats 1-2 weeks). Clerk's Enhanced Authentication looks cheapest on paper, but it does not match WorkOS on depth and directory-sync quality.

Scenario C · Global consumer app (500,000 MAU)

ProviderEstimated monthly bill
Clerk$5,000-10,000+
WorkOS AuthKit~$0 - low hundreds (within current 1M MAU free band)
Auth0 B2C$20,000-40,000+
Stytch$5,000-10,000
Better Auth~$200-2,000 (DB + servers)
Firebase Auth~$1,500-2,500 (MAU unit pricing)
Supabase~$1,000+ (DB + traffic)

Reading: 500K MAU is the inflection point for nearly every MAU-priced SaaS. Clerk, Auth0, and Stytch bills get scary in this band. Reasonable choices: self-hosting (Better Auth on Postgres), WorkOS AuthKit (while their current policy holds), or Firebase.

All prices are estimates based on the May 2026 public pricing pages and release info. Real bills can swing ±50% with add-ons, support tiers, and overage. Always run your own workload through a real quote.


Chapter 5 · Decision Tree — Which Should You Pick

If eight axes, ten options, and three pricing scenarios still leave you stuck, the honest decision tree:

[Q1] Are you B2C, B2B, or both?
   |-- Pure B2C -> Q2
   |-- Pure B2B -> Q4
   '-- Both -> Q3

[Q2] B2C: expected MAU in 1 year?
   |-- under 10K -> Clerk Pro, or Better Auth / Auth.js (preference)
   |-- 10K to 100K -> Clerk / Stytch / Kinde by DX taste, or Better Auth self-hosted
   '-- 100K+ -> WorkOS AuthKit, Firebase, or Better Auth self-hosted (Clerk and Auth0 get expensive)

[Q3] Hybrid: do you actually care about B2B?
   |-- B2B is "nice to have" -> Clerk + Enhanced Auth, or Kinde
   '-- B2B is 50%+ of revenue -> WorkOS (B2C via AuthKit covers the rest)

[Q4] B2B: how much of your revenue is enterprise?
   |-- SMB / mid-market -> Clerk, Kinde, or Auth0 Pro
   '-- Enterprise / SAML / SCIM required -> WorkOS (dominant) or Auth0 B2B (if budget allows)

[Q5] Self-hosting requirements?
   |-- Data sovereignty / on-prem -> Keycloak (separate post) or SuperTokens / Logto
   |-- Full-stack TS team starting small -> Better Auth
   '-- Next.js + free DB / infra control -> Better Auth (favored over Auth.js v5)

Six core decision heuristics:

  1. If B2B enterprise is 50%+ of revenue -> WorkOS is first pick. Few other answers. SAML, SCIM, and directory sync depth are simply a different category.
  2. Indie / small team + Next.js -> Clerk or Better Auth. Choose by whether you want to manage anything (Clerk: no; Better Auth: yes, with full OSS and DB control).
  3. Already on Supabase or Firebase -> use their Auth. Slapping in a separate auth provider makes RLS and sessions awkward.
  4. Almost no reason to start a new project on Auth0. Same price band buys you a better-feeling product through Clerk, Stytch, or WorkOS.
  5. If MAU might cross 500K, simulate the bill now. Migrating away once the bill scares you is even scarier.
  6. If you are on Lucia, plan the migration today. See Chapter 9.

Chapter 6 · Self-Hosting TCO — Is It Really Cheaper

"Let's build our own auth" or "Let's self-host Keycloak / SuperTokens / Better Auth" almost always comes from a first invoice. SaaS Auth0 sent a 5,000monthlybill;Keycloakrunsona5,000 monthly bill; Keycloak runs on a 100 EC2 instance. Right?

Decompose the 5-year TCO.

SaaS side cost (Clerk, Auth0 B2C, etc.):

  • License: per-MAU bill. At 100K MAU, roughly $20K-100K per year.
  • Engineering: nearly zero. One person, one week for integration.
  • Operational burden: zero. Their SLA covers downtime.
  • Migration cost: lock-in. To leave, verify how password hashes, social connections, and sessions can be exported.

Self-hosted side cost (Keycloak, SuperTokens, Better Auth):

  • License: zero.
  • Infra: instances, DB, load balancer, backups. For serious HA and multi-region, $500-2,000/month.
  • Engineering: setup plus operations. This is the giant. Roughly 0.1-0.3 FTE of SRE time. Patches, upgrades, incident triage, SAML debugging. $20K-60K per year in labor.
  • Security burden: yours. CVE response, patching, penetration testing. A zero-day eats your night.
  • Compliance: SOC2 / ISO 27001 audits cover the auth system too — extra effort.

Very simplified 5-year cumulative simulation for a B2C app at 100K MAU:

Clerk Pro + MAU overage:
  ~$40K per year on average x 5 years = $200K
  Engineering: $5K (integration) + ~$0 (ops) = $5K
  Total: ~$205K

Better Auth self-hosted:
  License: $0
  Infra: $800/month x 60 months = $48K
  Engineering: 0.2 FTE x 5 years x $150K/year = $150K
  Total: ~$200K

Surprise: the 5-year TCO comes out roughly equal. Self-hosting is not "free." If you account for engineering honestly, SaaS and self-hosting end up at similar cost. SaaS wins when: auth is not your core business, the team is small, and you'd rather spend ops time elsewhere. Self-hosting wins when: data sovereignty demands it, MAU is in the millions, you need deep auth customization, or you already have an SRE who runs auth well.


Chapter 7 · Clerk vs WorkOS — The Most Common Comparison

The single most common question. Both are well-built; they live in different categories.

Clerk wins when:

  • Full-stack, B2C-first, Next.js-first.
  • You want <SignIn /> and <UserButton /> to deliver a usable screen in 30 seconds.
  • Organizations are a "nice-to-have" rather than the core business.
  • Indie / small team / early-stage startup.

WorkOS wins when:

  • B2B SaaS where enterprise customers are a large share of revenue.
  • SAML / SCIM is effectively required (Okta, Azure AD, OneLogin, Google Workspace connections).
  • You already have your own signup UI and just want to add enterprise readiness.
  • Or it is a brand-new project and AuthKit's 1M-MAU-free policy makes hosted login attractive.

Some teams use both. B2C side on Clerk; enterprise connections on WorkOS. Not the cleanest, but doable.

2026 shift: AuthKit grew beyond SAML / SCIM to include social, passwordless, and passkey in a hosted UI, overlapping Clerk's home turf. The 1M MAU free policy is pulling indies and startups in. Clerk has pushed the other way with B2B Organizations and Enhanced Authentication. The category boundary is blurring.


In 2026, "password login" is not the default for new projects anymore. The default is one of:

  • Passkey (WebAuthn). Public key stored on the device or in a password manager (1Password, Bitwarden). iCloud Keychain and Google Password Manager sync them across devices. Users never "remember a password." Best UX, best security.
  • Magic link. A one-time link via email. Very simple UX but suffers from email delivery latency and skepticism about email itself as an auth factor.
  • OTP (email or SMS). Six-digit codes. SMS is declining due to SIM-swap risk and telecom cost.

The 2026 trend: passkey first, magic link fallback, SMS deprecated. Apple, Google, and Microsoft now back passkey at the OS level; device adoption exceeds 80%. The learning curve has effectively flattened.

Passkey depth by provider:

ProviderPasskey support
StytchCore category, deepest support
ClerkStable first-class support
WorkOS AuthKitStable first-class support
Auth0First-class support
KindeFirst-class support
Better AuthPasskey plugin (stable)
SuperTokensFirst-class support
SupabaseBeta
FirebaseBeta, platform variation
Auth.jsBeta, adapter-dependent

Magic link exists in nearly every provider. Differences emerge in deliverability, template customization, resend logic, and rate limiting — the boring details.


Chapter 9 · The Lucia Migration — Where To Go

In March 2025, Lucia's maintainer pilcrowOnPaper posted this official notice:

  • Lucia, as a library, will not receive further maintenance.
  • His authentication learning guide remains free on GitHub as a learning resource.
  • His OAuth client library Arctic continues to be maintained and developed.
  • New projects should pick another library (or build their own).

Migration options:

Option 1 - Move to Better Auth. The spiritual successor. TypeScript-native, session-based, DB adapters, plugins. The user / session table schemas are similar (id, user_id, expires_at), and the email + password flow translates cleanly. The most popular 2025-26 migration path.

Option 2 - Move to Auth.js v5. For Next.js-heavy stacks. The adapter API is different, and the callback / session model takes more work to reconcile.

Option 3 - Arctic + your own session management. Split out only the OAuth piece. Manage sessions yourself in your DB / cookies. Closest to the "Lucia guide" philosophy. Smallest learning cost but you accept session code scattered across your codebase.

Option 4 - Move to a SaaS like Clerk or WorkOS. When direct management of Lucia became too costly. Mandatory check: password hash format compatibility. argon2 / bcrypt imports are usually supported, but SCRAM or older Lucia SHA-256 variants may need a custom migration script.

Migration checklist:

  • Export user table; import into new schema.
  • Verify password hash format compatibility.
  • Plan for session-token / cookie-name change and existing-session invalidation policy.
  • Handle email-verification and password-reset tokens.
  • Preserve social connections (provider user_id mappings).
  • Choose between dual-write gradual migration and big-bang cutover.

Chapter 10 · NextAuth (Auth.js) vs Better Auth — Choosing a Library

If you go the self-hosted-library route, the choice narrows to these two.

Auth.js (formerly NextAuth) — Long history of stability, huge user base, many integrations. v5 introduced the auth() helper, App Router friendliness, and @auth/core for framework neutrality. Downsides: complex callback API (signIn, session, jwt), DB adapter behavior varies subtly. Goes deep, but the learning curve is steep.

Better Auth — Showed up in 2024, exploded in 2025-26. More intuitive API, cleaner plugin system, auto-generated DB schemas, CLI tooling. Stronger TypeScript type inference. Drizzle, Prisma, Kysely, MongoDB adapters. Next.js, Nuxt, SvelteKit, Solid, Astro, Hono, Express, Tanstack Start — all first-class.

How to pick:

  • Already using Auth.js and happy with behavior - no reason to switch.
  • Greenfield project - Better Auth is favored. DX, plugin system, docs all feel better.
  • Multi-framework (same auth across Next.js + SvelteKit + Hono, etc.) - Better Auth.

2026 npm trends: Auth.js maintains a stable user base; Better Auth is in explosive growth. Auth.js maintainers themselves have begun adopting design ideas from Better Auth.


Chapter 11 · Anti-Patterns — Ten Mistakes I See Constantly

From a year of code reviews and consulting.

  1. JWT used as a session with no revoke. Access token TTL of 24h + no revoke = a fired employee makes API calls all day. Short TTL + refresh + revoke list, or session-based.
  2. Buying Auth0 then reimplementing every feature manually. If you write your own signup form, email delivery, and MFA, you forfeit the reason to pay Auth0. Use Universal Login or the SDK widgets.
  3. Assuming Clerk / Stytch migration cost is zero. "If MAU grows, we'll switch" — but verify you actually can export password hashes, social connections, and sessions.
  4. Buying WorkOS without SAML. WorkOS's value-1 is enterprise SSO. Without SAML or SCIM, you are leaving half the value on the table.
  5. Supabase Auth + a separate Postgres. Supabase Auth wants its user table in Supabase Postgres for RLS / triggers to feel natural. Splitting it out gets awkward.
  6. Passkey added with no backup fallback. A user who loses their device gets locked out. Magic link or recovery codes are mandatory.
  7. Hand-rolling SAML debugging. Okta, Azure AD, OneLogin, Google Workspace each have quirks; IdP-initiated vs SP-initiated flows differ. You will spend two weeks in a swamp. This is the WorkOS premium.
  8. MAU pricing not matched to your own MAU definition. The provider's MAU definition (e.g., any user who logged in once that month, or any session that has not expired) may differ from yours. 1M signups with 50K actives is a different bill.
  9. Adding passkey but not measuring uptake. Actual usage depends heavily on signup flow, UI copy, and iOS / Android mix. Checking the "passkey supported" box without measurement is suspect ROI.
  10. Running on Lucia without a migration plan. Within a year this becomes mandatory. Do not procrastinate.

Epilogue — Decision Checklist and What's Next

Decision checklist

  • Target market: B2C, B2B, or hybrid?
  • 1-year and 3-year MAU projections.
  • Enterprise customer share and SAML / SCIM mandatoryness.
  • Self-hosting vs SaaS decision (5-year TCO comparison).
  • Passkey, magic link, and MFA policy.
  • Migration-cost evaluation up front (the lock-in axis).
  • Data sovereignty and region needs (especially EU, Korea, Japan).
  • Compliance demands (SOC2, ISO 27001, HIPAA, GDPR, APPI).
  • Operations burden vs engineering cost honest assessment.
  • Most importantly: "The worst option is building your own" — you will regret it within 24 months.

Anti-pattern recap

  • Building auth from scratch.
  • Doing only the initial MAU math, never the 12-month look-ahead.
  • Choosing Auth0 by default (in 2026, it is no longer the default).
  • Assuming self-hosting is "free."
  • Adding passkey with no measurement and no fallback.

What's next

  • "WorkOS AuthKit hands-on — 1M MAU free auth on Next.js in 30 minutes."
  • "Better Auth full-stack setup — Drizzle, Postgres, Resend, passkey plugin guide."
  • "Enterprise SAML debugging — Okta, Azure AD, OneLogin, Google Workspace compatibility matrix."
  • "Auth migration — password-hash compatibility and gradual cutover patterns."

If you have to decide auth for the next project, use the eight axes, ten options, and decision tree above to narrow to two or three finalists in 30 minutes. Then open the pricing pages of those finalists and run your own workload through a real quote. Do not decide auth by guesswork.


References