# 现代 Web 应用的身份认证方案解析
身份认证(Authentication)是 Web 应用安全基石。随着技术发展,认证方案也从简单的 Cookie/Session 演变为多样化的标准。
## 1. Session-based Authentication
传统的服务端认证模式。
- **流程**:用户登录 -> 服务端创建 Session -> 返回 Session ID (Cookie) -> 后续请求携带 Cookie。
- **优点**:状态在服务端,易于控制(如强制下线)。
- **缺点**:扩展性差(需要 Session 存储),跨域处理麻烦。
## 2. Token-based Authentication (JWT)
无状态认证模式。
- **流程**:用户登录 -> 服务端签发 JWT -> 返回 Token -> 客户端存储 (localStorage/Cookie) -> 后续请求 Header 携带 Token。
- **优点**:无状态,扩展性好,支持跨域。
- **缺点**:Token 一旦签发无法撤销(除非设置黑名单),Payload 大小影响传输。
## 3. OAuth 2.0 & OIDC
第三方授权标准。
- **场景**:使用 GitHub、Google 登录。
- **核心**:Access Token, Refresh Token, ID Token。
## 4. NextAuth.js (Auth.js)
在 Next.js 生态中,NextAuth.js 是集大成者。它支持上述所有模式,并提供了对数据库适配器(Prisma, TypeORM 等)的开箱即用支持。
## 安全最佳实践
- 始终使用 **HTTPS**。
- Cookie 设置 **HttpOnly**, **Secure**, **SameSite** 属性。
- 敏感操作需二次验证(2FA)。
- 不要将敏感信息(如密码)存储在 Token 中。
## 总结
没有绝对完美的认证方案,只有最适合业务场景的方案。对于大多数现代 SPA/SSR 应用,结合 HTTP-only Cookie 的 JWT 方案通常是平衡安全与体验的最佳选择。