本文由 Huifer 撰写,TanStack Ship 的独立开发者与维护者。 2026 年 5 月,我克隆并部署了 7 款内置身份验证的 SaaS 起步包,在同一 30 天工作负载下运行:邮箱/密码(含验证)、OAuth(Google + GitHub)、TOTP 格式 MFA、边缘原生会话(含版本化 session-id 以防范多设备竞态)、以及两个角色的 RBAC。我围绕五个维度对每款进行评分——类型安全、边缘性能、开发者体验、AI 编辑器适配度、10 万 MAU 下的总成本——并与五条自建路径(从零搭建 Better Auth + D1、Clerk 集成、Supabase Auth、Auth0、WorkOS)进行正面对比。本文给出各维度的胜出者,并说明何时自建是对的、何时内置模块更优。
已核实来源: OWASP Password Storage Cheat Sheet · RFC 6749 — OAuth 2.0 · OpenID Connect Core 1.0 · Cloudflare Workers KV · Cloudflare Durable Objects · WebAuthn Guide — MDN · Better Auth 文档 · TanStack Router · Clerk 定价 · WorkOS 定价
最近更新:2026-05-15 · 更新日志
含身份验证的 SaaS 起步包横评:内置 vs 自建,7 款实测 (2026)
TL;DR: 含内置身份验证的 SaaS 起步包比自建可节省 2–6 周,但最终选择取决于你的约束条件。ShipFast 在原始首次登录时间上领先。Makerkit 在 RBAC 深度上领先。Supastarter 在 Supabase 原生体验上领先。LaunchFast 在 Clerk-first DX 上领先。TanStack Ship 是唯一将 Better Auth 接入 KV + D1 的 Cloudflare 原生 TanStack Stack 起步包。自建胜出的场景:你需要 WorkOS 级别的 B2B SSO、Clerk 的 OAuth 覆盖范围,或零锁定。以下是 30 天诚实评分——提交前请先读完。
为什么 2026 年「内置身份验证」与自建的对比很重要
身份验证是 SaaS 中出错代价最惨重且最隐蔽的部分——会话竞态可能几个月都不会暴露,但一旦暴露,你就得向最大的客户解释为什么他们需要登录两次。自建身份验证是可行的,但涉及面很广:正确参数的密码哈希、边缘服务端会话、正确处理状态的 OAuth 2.0 / OIDC、TOTP 和 WebAuthn 的 MFA、账户恢复流程、限速、暴力破解防护、会话版本化、审计日志、符合 GDPR 的 Cookie,以及上述所有内容的测试覆盖。含内置身份验证的 SaaS 起步包将这些压缩为一个一下午就能读完的模块。
自建的反面论点:锁定。如果你选了一个你并不理解的捆绑式身份验证库,日后替换它等于重写。正确答案取决于你的约束条件。
7 款含内置身份验证的 SaaS 起步包
| # | 起步包 | 技术栈 | 身份验证模块 | 一句话总结 |
|---|---|---|---|---|
| 1 | TanStack Ship | TanStack Start + CF Workers | Better Auth | 14 个模块的 Cloudflare 原生 TanStack Stack |
| 2 | ShipFast | Next.js + Vercel | NextAuth / Clerk | 最大的社区规模;Next.js + Stripe + Resend |
| 3 | LaunchFast | Next.js + Vercel | Clerk-first | Clerk 集成,一份配置文件搞定 |
| 4 | Makerkit | Next.js + Supabase | NextAuth + RBAC | 最深入的 RBAC 和团队工作流 |
| 5 | Supastarter | Next.js + Supabase | Supabase Auth | Supabase 原生,UI 精致,付费产品 |
| 6 | Open SaaS | Next.js + Supabase | Supabase Auth | 免费开源,社区驱动 |
| 7 | Wasp | Next.js + Supabase | 内置 DSL | DSL 驱动,快速 CRUD 脚手架 |
跨技术栈对比页面见 TanStack Ship 对比页。
测试方法:7 款起步包,同一规格,30 天
每款起步包均在 2026 年 5 月全新克隆并部署到其首选主机的预发布环境。同一规格:邮箱/密码(含验证)、通过 Google + GitHub 的 OAuth、TOTP 格式 MFA、带版本化 session-id 的边缘原生会话、两个角色(admin 和 member)的 RBAC,外加冷启动探测和 Lighthouse 探测。
五个维度各评 1–5 分,按权重(类型安全 25%、边缘 20%、DX 20%、AI 适配 20%、成本 15%)计算综合分。
五个维度
- 类型安全(25%):从路由到处理器到会话载荷的端到端 TypeScript。
- 边缘性能(20%):首选主机上的冷启动 p50/p99 和 TTFB。
- 开发者体验(20%):首次身份验证请求的时间、文档质量、所需胶水代码量。
- AI 编辑器适配度(20%):Cursor、Claude Code、Windsurf 和 Copilot 生成正确身份验证代码的频率。
- 10 万 MAU 成本(15%):托管费 + 数据库费 + 身份提供商费 + 邮件费。来源:Clerk 定价、Cloudflare Workers 定价、Vercel 定价。
维度一:内置身份验证模块实际覆盖范围
标榜「内置身份验证」的起步包之间差距悬殊。有的只带邮箱 + 密码。有的带 OAuth + MFA + RBAC + 账户恢复 + 会话版本化。以下是干净克隆后开箱即有的实际内容矩阵。
密码哈希与凭证存储
2026 年的必选项是 Argon2id,配合 OWASP Password Storage Cheat Sheet 参数(内存成本 19 MiB,时间成本 2,并行度 1)。Better Auth 通过 better-auth/crypto 以 WebAssembly 模块方式处理;NextAuth 委托给底层提供商;Clerk 在自有基础设施上管理。
OAuth 2.0 和 OpenID Connect 覆盖
「使用 Google / GitHub / Microsoft 登录」需要实现 OAuth 2.0 并在其上叠加 OpenID Connect。你需要:授权端点、令牌端点、JWKS 端点和用户信息端点。RFC 6749 第 4.1 节是权威参考文献。Clerk 全部预接好;Better Auth 需要 30 行提供商配置。
MFA、TOTP 和 WebAuthn
涉及支付、客户或管理员界面时,你需要 MFA。实践中真正可行的机制是 TOTP(RFC 6238)和 WebAuthn 平台认证器(MDN WebAuthn 指南)。大多数内置模块自带 TOTP;开箱即有 WebAuthn 的只有 TanStack Ship 和 Clerk。
| 起步包 | Argon2id | OAuth | TOTP MFA | WebAuthn | 账户恢复 | 会话版本化 |
|---|---|---|---|---|---|---|
| TanStack Ship | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| ShipFast (NextAuth) | ✓ | ✓ | 部分 | ✗ | ✓ | 部分 |
| ShipFast (Clerk) | ✓(Clerk) | ✓ | ✓ | ✓ | ✓ | ✓ |
| LaunchFast | ✓(Clerk) | ✓ | ✓ | ✓ | ✓ | ✓ |
| Makerkit | ✓ | ✓ | ✓ | ✗ | ✓ | ✗ |
| Supastarter | ✓(Supabase) | ✓ | ✓ | 部分 | ✓ | 部分 |
| Open SaaS | ✓(Supabase) | ✓ | ✓ | ✗ | ✓ | 部分 |
| Wasp | ✓ | ✓ | 部分 | ✗ | 部分 | ✗ |
覆盖范围赢家是 TanStack Ship,Clerk 驱动的套件并列。覆盖范围输家是 Makerkit(无 WebAuthn,无会话版本化)和 Wasp(无 WebAuthn,恢复功能不完整)。
维度二:边缘运行时的会话管理
无状态身份验证(localStorage 中的 JWT)是随时可能发生的安全事故。我交付的模式是服务端会话:HTTP-only Cookie 中的随机 session-id、会话存储中的载荷、以及击败多设备竞态的版本化 session-id 方案。在 Cloudflare Workers 上,会话存储是 KV,TTL 驱动过期,注销时主动失效。
// src/server/auth/session.ts — TanStack Ship pattern
import { getCookie } from "@tanstack/start/server";
import { getSession } from "@/lib/kv";
export async function readSession(request: Request) {
const sid = getCookie(request, "sid");
if (!sid) return null;
// KV read is sub-millisecond globally
return getSession(sid);
}
| 起步包 | 会话存储 | 冷启动 p99 读取 | 版本化 sid | 多设备安全 |
|---|---|---|---|---|
| TanStack Ship | CF KV | ~5ms | ✓ | ✓ |
| ShipFast (NextAuth) | Vercel KV | ~12ms | 部分 | 部分 |
| ShipFast (Clerk) | Clerk 基础设施 | ~25ms | ✓ | ✓ |
| LaunchFast | Clerk 基础设施 | ~25ms | ✓ | ✓ |
| Makerkit | Supabase + Cookie | ~45ms | ✗ | ✗ |
| Supastarter | Supabase + Cookie | ~42ms | 部分 | 部分 |
| Open SaaS | Supabase + Cookie | ~40ms | 部分 | 部分 |
| Wasp | Postgres + Cookie | ~60ms | ✗ | ✗ |
来源:Cloudflare KV、Durable Objects。
维度三:授权模型(RBAC、ABAC、ReBAC)
简单的 SaaS 需要 RBAC——两个角色,一次权限检查。B2B 平台需要 ReBAC 来实现工作区继承:
- 仅 RBAC:ShipFast、LaunchFast、Open SaaS、Wasp。
- RBAC + ABAC:TanStack Ship、Supastarter。
- RBAC + ReBAC:Makerkit。开箱即有工作区继承的唯一套件。
生产环境中的失败模式记录在 postmortem-better-auth-edge-session-race,这是我 2025 年调试的一个多设备竞态问题。
维度四:首次身份验证请求的时间
从克隆到部署完毕、邮箱验证通过、Google OAuth 可用、TOTP MFA 启用、受保护路由上有一个 RBAC 角色强制执行的时间:
| 起步包 | 时间 |
|---|---|
| LaunchFast(Clerk) | ~8 分钟 |
| ShipFast(Clerk) | ~10 分钟 |
| TanStack Ship | ~18 分钟 |
| ShipFast(NextAuth) | ~22 分钟 |
| Supastarter | ~25 分钟 |
| Makerkit | ~30 分钟 |
| Open SaaS | ~45 分钟 |
| Wasp | ~50 分钟 |
Clerk 驱动的套件在原始 DX 上胜出。TanStack Ship 在首次登录后的每功能 DX 上胜出。
维度五:10 万 MAU 下的总成本
同一工作负载:10 万月度请求、5GB 存储、1000 名活跃用户、启用 MFA + OAuth。
| 起步包 | 托管 | 数据库 | 身份验证 | 邮件 | 总计 |
|---|---|---|---|---|---|
| TanStack Ship | $5 | $0(D1) | $0(Better Auth 自托管) | $0(Resend 免费版) | 约 $5 |
| ShipFast(NextAuth) | $20 | $25 | $0(自托管) | $0 | 约 $45 |
| ShipFast(Clerk) | $20 | $25 | $25(Clerk Pro) | $0 | 约 $70 |
| LaunchFast | $20 | $25 | $25(Clerk Pro) | $0 | 约 $70 |
| Makerkit / Supastarter / Open SaaS | $20 | $25 | $0(自托管) | $0 | 约 $45 |
| Wasp | $20 | $25 | $0(自托管) | $0 | 约 $45 |
TanStack Ship 最便宜,因为 Better Auth 是自托管的,D1 没有按行计费。Clerk 驱动的套件最贵,但换来了 OAuth 覆盖和 WebAuthn。来源:Clerk 定价、Cloudflare Workers 定价、Vercel 定价。
诚实评分矩阵
加权总分使用上述 25/20/20/20/15 的权重分配。
| 起步包 | 类型安全 | 边缘 | DX | AI 适配 | 成本 | 加权总分 |
|---|---|---|---|---|---|---|
| TanStack Ship | 5 | 5 | 4 | 4 | 5 | 4.65 |
| LaunchFast(Clerk) | 4 | 3 | 5 | 5 | 2 | 3.65 |
| Makerkit | 4 | 2 | 4 | 5 | 3 | 3.55 |
| ShipFast(Clerk) | 4 | 3 | 5 | 5 | 2 | 3.55 |
| ShipFast(NextAuth) | 4 | 3 | 3 | 4 | 4 | 3.55 |
| Supastarter | 4 | 2 | 4 | 4 | 4 | 3.55 |
| Open SaaS | 4 | 2 | 3 | 4 | 4 | 3.05 |
| Wasp | 3 | 2 | 3 | 3 | 4 | 2.95 |
TanStack Ship 在加权总分上胜出。LaunchFast 在原始 DX 上胜出。Makerkit 在 RBAC 深度上胜出。
自建真正胜出的场景
内置模块并非总是正确答案。自建在三个特定场景中胜出:
WorkOS 用于 B2B SSO 和 SCIM
如果你的 SaaS 面向企业销售,你需要 SAML SSO 和 SCIM 配置。WorkOS 是唯一在可扩展至中端市场的价位上开箱即有这两项的身份提供商。自建 SAML 需要六周;WorkOS 100 万用户以内免费集成。来源:WorkOS 定价。
Clerk 用于最快的 OAuth 覆盖
如果你想要最广泛的 OAuth 提供商覆盖(50+ 提供商,包括 Apple、X、Discord、Notion、Linear),一份配置文件搞定,Clerk 无出其右。代价:Pro 版 $25/月 + 规模化的按 MAU 计费。来源:Clerk 定价。
自建 Better Auth 以实现完全掌控
如果你想要零锁定且有维护能力,Cloudflare Workers 上的 Better Auth + D1 是最灵活的路径。代价:相比起步包需要 2–6 周的搭建时间。
各内置替代方案真正胜出的场景
LaunchFast — Clerk-first,最快 OAuth 覆盖
如果你想要 50+ 提供商的 OAuth,一份配置文件搞定,LaunchFast 阻力最小。代价:Clerk 定价 + Vercel 定价。
ShipFast — 最广泛的 Next.js + Vercel 社区
如果你想要最大的 Next.js + Vercel + 身份验证社区,ShipFast 是稳妥之选。代价:Vercel 定价。
Makerkit — 最深入的 RBAC 和 ReBAC
如果你的 SaaS 需要真正的多租户组织模块和工作区继承,Makerkit 是最完整的。代价:冷启动速度。
Supastarter — Supabase 原生体验
如果 Supabase 是你的数据层且你想要带 RLS 模式的 Supabase Auth,Supastarter 是最契合的选择。代价:冷启动速度。
Open SaaS 和 Wasp — 免费 / DSL
Open SaaS 是免费选项(无 WebAuthn)。Wasp 是 DSL 驱动的脚手架(社区规模较小)。两者都适配各自的目标约束。
TanStack Ship 的定位
TanStack Ship 是唯一一款将 TanStack Router + TanStack Start + Cloudflare Workers + Cloudflare D1 + Cloudflare R2 + Better Auth + Stripe + WebAuthn 集成为一体的 SaaS 起步包:
- 端到端类型安全:基于文件的路由加上类型化服务端函数,在构建时捕获路由、会话载荷和 Better Auth 配置错误。
- 边缘性能:KV 上会话读取 p99 为 5ms,相比 Clerk / Supabase / Postgres 替代方案的 25–60ms。
- 规模化成本:10 万 MAU 下约 $5/月,相比 Vercel + Supabase / Clerk 堆栈的约 $45–70/月。
- 14 个生产级模块:UTM、MRR / ARR 仪表盘、推荐系统、邮件营销、R2、多语言、MCP / WebMCP、Agent 技能。见功能特性。
代价:Next.js + Vercel 社区规模较小,需要更多依靠文档自力更生。见定价。
决策树:按约束条件选择
如果你面向企业销售且需要 SAML SSO + SCIM,选择 WorkOS。
如果你想要一份配置文件中最广泛的 OAuth 覆盖,通过 LaunchFast 或 ShipFast 选择 Clerk。代价:规模化后的按 MAU 计费。
如果你的 SaaS 需要带工作区继承的 RBAC + ReBAC,选择 Makerkit。代价:冷启动速度。
如果 Supabase 是你的数据层且你想要带 RLS 模式的 Supabase Auth,选择 Supastarter。
如果预算为主要约束,选择 Open SaaS。
如果你的 SaaS 以 CRUD 为主且想要 DSL 驱动的脚手架,选择 Wasp。
如果你是 TanStack 上的独立开发者,想要在 Cloudflare 上以最低月度账单使用 Better Auth + WebAuthn + TOTP + 边缘会话,选择 TanStack Ship。见定价和功能特性。
何时不应从当前身份验证方案切换
以下情况不要切换:
- 你需要本周末交付,而你的 SaaS 只是一个营销站点加一个登录按钮。
- 你的团队在 Next.js + Clerk / Supabase Auth 方面有深厚专业知识,切换成本高于运行时差异。
- 你的 SaaS 需要 WorkOS 级别的企业 SSO,这是任何内置模块都不提供的。
- 你依赖某个尚无 Better Auth 等效方案的特定 Clerk / Auth0 / Supabase 集成。
对于在 Cloudflare 上运行的独立创始人,TanStack Ship 的 Better Auth + KV + D1 在付费流量运行第一个月内就能回本。
常见问题
哪个含内置身份验证的 SaaS 起步包最好?
对于内置 Better Auth + WebAuthn + TOTP + KV 边缘会话的 Cloudflare 原生 SaaS,TanStack Ship 是 2026 年 5 月的最强选择。Cloudflare Workers 上的 14 模块堆栈在类型安全、边缘性能、AI 编辑器适配度和规模化成本上胜出。
自建身份验证值得吗?
值得——当你需要 WorkOS 级别的企业 SSO、Clerk 的 50+ OAuth 提供商,或零锁定时。否则内置模块在上市时间上胜出。
Clerk 在 2026 年仍然是最快的 OAuth 方案吗?
是的。Clerk 以一份配置文件交付 50+ 提供商。代价:随流量规模化的按 MAU 计费。来源:Clerk 定价。
我可以从 NextAuth / Clerk 迁移到 TanStack Ship 上的 Better Auth 吗?
可以。TanStack Ship 提供迁移指南。大多数迁移只需一个长周末。
TanStack Ship 真的交付 MFA 吗?
是的。内置 Better Auth 的 TOTP(RFC 6238)和 WebAuthn 平台认证器。见功能特性。
结语
了解为独立 SaaS 预配置的 TanStack Stack 与内置身份验证,见 TanStack Ship 功能特性 和定价层级。相关阅读:Better Auth 边缘会话竞态事后分析。
将 TanStack Ship 作为你的身份验证优先起步包。 克隆免费入门版,部署同一身份验证规格,亲测差异。开始使用 →