用途:为 NestJS 应用建立安全基线,覆盖认证、授权、加密、加固、数据保护与密钥管理,优先级标为 P0(关键)。
主要能力:认证采用 @nestjs/passport 与 passport-jwt,强制 RS256(首选)或 HS256,拒绝 none 算法,校验 iss 与 aud 声明;访问令牌短(15m),刷新令牌长且为 httponly(7d);管理面板要求 2FA。授权默认拒绝,将 AuthGuard 绑定为全局 APP_GUARD,用 @Public() 装饰器放行公开路由,通过 Reflector.getAllAndOverride 合并方法/类角色。加密使用 Argon2id 而非 Bcrypt,加密采用 AES-256-GCM 配合 KMS 轮换。加固要求启用 Helmet 的 HSTS、CSP,CORS 仅允许明确来源、不得用 *,生产环境使用 Redis 支持的 @nestjs/throttler 限流,基于 Cookie 的认证需 CSRF。数据保护用 ClassSerializerInterceptor 与 @Exclude() 做序列化,ValidationPipe({ whitelist: true }) 防批量赋值,并记录变更审计(Who、What、When)。密钥在运行时经 vault(AWS Secrets Manager / HashiCorp Vault)注入,而非 .env;CI/CD 运行 npm audit --prod。
用法要点:在 main.ts 中 app.use(helmet());JWT 使用 passport-jwt 与 RS256;全局注册 AuthGuard 为 APP_GUARD,用 @Public() 标记开放路由;启用 @nestjs/throttler 并接 Redis;用 argon2.hash(password, { type: argon2.argon2id }) 替换 bcrypt;验证时运行 npm audit --prod 并确认未认证请求返回 401。
反模式:避免影子 API(定期审计路由,生产禁用 /docs)、SSRF(出站请求域名白名单)、SQLi(用 ORM,避免字符串拼接的原生 query)、XSS(用 dompurify 净化 HTML 输入)。
限制:资料未提供具体版本要求、包安装命令、完整实现代码与兼容性说明,相关细节暂未提供。