安全与风控
实现或加固 API 认证时:按场景选择 JWT/OAuth…
在构建 API 认证、第三方集成、服务间通信,或处理令牌管理、安全头、认证流错误时,用现代标准安全实现认证机制。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
实现或加固 API 认证时:按场景选择 通用
解决思路
- 实现认证时,按场景选择方法并落地:JWT 用于无状态认证和 SPA;OAuth 2.0 用于第三方集成;API Keys 用于服务到服务;Session 用于传统 Web 应用;对应安全级别分别为 High、High、Medium、High。
- 在 Node.js 中通过 require('jsonwebtoken') 引入 jsonwebtoken。
- 实现 generateTokens(user):用 jwt.sign 生成 accessToken,payload 包含 { userId: user.id, role: user.role },使用 process.env.JWT_SECRET,设置 { expiresIn: '15m' }。
- 实现 generateTokens(user):用 jwt.sign 生成 refreshToken,payload 包含 { userId: user.id, type: 'refresh' },使用 process.env.REFRESH_SECRET,设置 { expiresIn: '7d' }。
- 实现 authMiddleware(req, res, next):从 req.headers.authorization 读取 Authorization 头。
- 校验 Authorization 头格式:如果不存在或不以 'Bearer ' 开头,返回 401 和 { error: 'Malformed authorization header' }。
- 用 authHeader.split(' ') 分割 Authorization 头;如果 parts.length !== 2,返回 401 和 { error: 'Malformed authorization header' }。
- 取 token = parts[1];如果 token 为空,返回 401 和 { error: 'No token provided' }。
- 用 jwt.verify(token, process.env.JWT_SECRET) 验证 token,把结果赋给 req.user,然后调用 next()。
- 如果 jwt.verify 抛错,返回 401 和 { error: 'Invalid token' }。
- 始终使用 HTTPS。
- 将 token 存储在 HttpOnly cookies 中,不要存储在 localStorage。
- 用 bcrypt 哈希密码,cost factor 12+。
- 在认证端点上实现 rate limiting。
- 定期轮换 secrets。
- 绝不在 URL 中传输 tokens。
- 设置安全响应头中间件:res.setHeader('X-Content-Type-Options', 'nosniff')。
- 设置安全响应头中间件:res.setHeader('X-Frame-Options', 'DENY')。
- 设置安全响应头中间件:res.setHeader('Strict-Transport-Security', 'max-age=31536000')。
- 需要 Python/Flask 实现时,查看 references/python-flask.md。
- 在 references/python-flask.md 中实现 Flask JWT 与基于角色的访问控制装饰器。
- 在 references/python-flask.md 中实现 OAuth 2.0 Google 集成,使用 Authlib。
- 在 references/python-flask.md 中实现 API key 认证与安全哈希。
- 避免存储明文密码。
- 避免使用弱 JWT secrets。
- 避免忽略 token 过期。
- 避免在生产环境禁用 HTTPS。
- 避免记录敏感 tokens。