API认证 api-authentication

API认证是一种后端开发技能,专注于使用JWT、OAuth 2.0和API密钥等现代标准实现安全的API认证机制,适用于构建认证系统、处理第三方集成、服务间通信,并涵盖令牌管理、安全头设置和认证流程优化,关键词:API认证、JWT、OAuth 2.0、API密钥、安全认证、后端开发、网络安全。

后端开发 0 次安装 0 次浏览 更新于 3/8/2026

name: API认证 description: 使用JWT、OAuth 2.0和API密钥实现安全的API认证。适用于认证系统、第三方集成、服务间通信,或遇到令牌管理、安全头、认证流程错误时。

API认证

使用现代标准和最佳实践实现安全的API认证机制。

认证方法

方法 使用场景 安全等级
JWT 无状态认证,单页应用
OAuth 2.0 第三方集成
API密钥 服务间通信 中等
会话 传统Web应用

JWT实现(Node.js)

const jwt = require('jsonwebtoken');

const generateTokens = (user) => ({
  accessToken: jwt.sign(
    { userId: user.id, role: user.role },
    process.env.JWT_SECRET,
    { expiresIn: '15m' }
  ),
  refreshToken: jwt.sign(
    { userId: user.id, type: 'refresh' },
    process.env.REFRESH_SECRET,
    { expiresIn: '7d' }
  )
});

const authMiddleware = (req, res, next) => {
  const authHeader = req.headers.authorization;

  // 验证授权头格式
  if (!authHeader || !authHeader.startsWith('Bearer ')) {
    return res.status(401).json({ error: '授权头格式错误' });
  }

  const parts = authHeader.split(' ');
  if (parts.length !== 2) {
    return res.status(401).json({ error: '授权头格式错误' });
  }

  const token = parts[1];
  if (!token) {
    return res.status(401).json({ error: '未提供令牌' });
  }

  try {
    req.user = jwt.verify(token, process.env.JWT_SECRET);
    next();
  } catch (err) {
    res.status(401).json({ error: '无效令牌' });
  }
};

安全要求

  • 始终使用HTTPS
  • 将令牌存储在HttpOnly cookie中(而不是localStorage)
  • 使用bcrypt哈希密码(成本因子12+)
  • 在认证端点上实施速率限制
  • 定期轮换密钥
  • 永远不要在URL中传输令牌

安全头

app.use((req, res, next) => {
  res.setHeader('X-Content-Type-Options', 'nosniff');
  res.setHeader('X-Frame-Options', 'DENY');
  res.setHeader('Strict-Transport-Security', 'max-age=31536000');
  next();
});

附加实现

参见 references/python-flask.md 获取:

  • 带有基于角色的访问控制装饰器的Flask JWT
  • 使用Authlib的OAuth 2.0 Google集成
  • 带有安全哈希的API密钥认证

常见错误避免

  • 存储明文密码
  • 使用弱JWT密钥
  • 忽略令牌过期
  • 在生产环境中禁用HTTPS
  • 记录敏感令牌