← 返回主页
Security2024-12-02

现代 Web 应用的身份认证方案解析

# 现代 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 方案通常是平衡安全与体验的最佳选择。