JWT 安全最佳实践完整指南

10 min read
JWT, Security, Authentication

安全最佳实践

在应用程序中实施 JWT 时,遵循安全最佳实践对于防止漏洞至关重要。

1. 使用强密钥

始终使用强随机密钥来签署 JWT。避免使用可预测或简短的密钥。

// 不好
const secret = "password123";

// 好
const secret = crypto.randomBytes(64).toString('hex');

2. 设置适当的过期时间

JWT 应该有较短的过期时间,以最小化攻击者的机会窗口。

{
  "exp": Math.floor(Date.now() / 1000) + (60 * 15), // 15 分钟
  "iat": Math.floor(Date.now() / 1000)
}

3. 使用 HTTPS

始终通过 HTTPS 传输 JWT 以防止中间人攻击。

4. 验证所有声明

始终验证发行者、受众和过期声明:

function validateToken(token) {
  const decoded = jwt.verify(token, secret);

  if (decoded.iss !== 'your-app.com') {
    throw new Error('无效的发行者');
  }

  if (decoded.exp < Date.now() / 1000) {
    throw new Error('令牌已过期');
  }

  return decoded;
}

5. 不要存储敏感数据

JWT 是编码的,不是加密的。永远不要在载荷中存储密码或信用卡号等敏感信息。

6. 实现令牌刷新

使用刷新令牌来维护用户会话,而不暴露长期访问令牌。

7. 使用适当的算法

在分布式系统中,优先使用 RS256 或 ES256 而不是 HS256 以获得更好的安全性。

Share this article

Back to Blog