TL;DR: 企业级销售需要特定的安全与合规功能:SSO/SAML、SOC 2 报告、审计日志、数据保留策略及定制 SLA。本文涵盖企业就绪清单、通过 Better Auth 实现 SSO、通过 D1 实现审计日志,以及 SOC 2 认证流程。
引言
企业客户的需求与个人用户或小型团队截然不同。他们需要安全认证、合规保证、与自身身份系统的集成,以及关于正常运行时间和数据处理的合同承诺。
企业就绪不是可以后期再追加的功能,它需要从一开始就做出架构决策。
企业就绪清单
| 功能 | 优先级 | 实施周期 | 对收入的影响 |
|---|---|---|---|
| SSO/SAML | 高 | 2–4 周 | 解锁中型市场 |
| SOC 2 Type II | 高 | 3–6 个月 | 企业客户必备 |
| 审计日志 | 高 | 1–2 周 | 合规必需 |
| 数据保留策略 | 中 | 1 周 | GDPR / 企业需求 |
| 定制 SLA | 中 | 法务审查 | 推动成交 |
| VPC / 私有云 | 低 | 3–6 个月 | 受监管行业 |
使用 Better Auth 实现 SSO
企业客户需要与现有身份提供者集成。SSO 中间件拦截认证请求,检测组织是否启用了 SSO,并将请求重定向到相应身份提供者进行基于 SAML 的身份验证:
export const enterpriseAuthMiddleware = defineMiddleware({
before: async ({ request }) => {
const host = request.headers.get('host')
const org = await getOrgByDomain(host)
if (org?.ssoEnabled) {
// 验证 SAML 会话或重定向到 IdP 登录页
const session = await verifySAMLResponse(request)
if (!session) {
return redirectToIdP(org.ssoUrl)
}
return { user: session.user, org }
}
},
})
中间件在每次请求时检查组织的 SSO 配置。如果已启用 SSO,它会验证现有 SAML 会话或将请求重定向到 IdP 登录页。这种模式使认证层具备企业级能力,同时不会增加普通用户注册流程的复杂性。
审计日志系统
企业审计人员和安全团队需要系统中每个操作行为的完整记录。审计日志记录谁在什么时间、从哪里执行了什么操作——将每个事件以不可变记录的形式存储在数据库中:
export const logAuditEventFn = createServerFn({ method: 'POST' })
.handler(async ({ context }) => {
const { userId, action, resource, details } = context.event
await db.insertInto('audit_logs').values({
user_id: userId,
action, // 'user.deleted', 'subscription.changed'
resource, // 'user:123', 'org:456'
details: JSON.stringify(details),
ip_address: context.request.headers.get('cf-connecting-ip'),
user_agent: context.request.headers.get('user-agent'),
timestamp: new Date().toISOString(),
}).execute()
})
每个审计事件记录执行者、执行的操作、受影响的资源,以及 IP 地址和用户代理等环境上下文。这些数据对于 SOC 2 合规、安全调查和面向客户的审计跟踪至关重要。
结语
企业就绪是一场旅程,而不是一个功能。先从 SSO 和审计日志着手——这些能解锁中型市场交易。当企业收入足以支撑投入时,再推进 SOC 2 认证。你构建的每一个企业级功能都应该在更高的订阅层级中计费。欲全面了解基础设施保护,请参阅 SaaS 安全最佳实践,并在 SaaS 多租户架构 指南中了解多租户架构如何支持企业级隔离。