API接口开发

API Token安全管理与防护实践

API接口开发
API Token安全管理与防护实践

Token是API认证的核心凭证,Token安全直接关系到整个系统的安全。访问令牌一旦泄露,攻击者可以冒充用户执行任意操作。本文从Token的全生命周期出发,介绍各环节的安全防护措施和实践经验。

Token生成安全

Token必须具有足够的熵值防止暴力猜测。推荐使用安全的随机数生成器生成至少32字节的随机令牌。令牌内容不要包含用户信息,用户信息应该从服务端查询而非从令牌解析。JWT虽然包含用户信息,但敏感数据不应放入JWT。令牌的签名密钥必须妥善保管,定期轮换。生产环境和测试环境使用不同的密钥,防止测试环境的密钥泄露影响生产系统。

Token传输安全

Token必须通过HTTPS传输,禁止在HTTP连接中传递Token。Token放在HTTP Authorization头中,使用Bearer方案,格式为 Authorization: Bearer 。不要通过URL查询参数传递Token,因为URL会出现在服务器日志和浏览器历史中。移动端应用使用安全的本地存储,不要放在SharedPreferences或UserDefaults这种容易被读取的位置。HttpOnly Cookie传输Token时要注意CSRF防护。

Token存储安全

服务端不存储JWT本身(无状态),但需要存储刷新令牌和黑名单。刷新令牌需要加密存储在数据库中。前端存储Token有三种方式:内存(最安全但页面刷新后丢失)、HttpOnly Cookie(安全但需防CSRF)、LocalStorage(方便但易受XSS攻击)。推荐短时间Token放在内存,刷新令牌放在HttpOnly Cookie中。对于移动端,使用系统提供的安全存储区域。

Token生命周期管理

Token应设置合理的过期时间,访问令牌15分钟到2小时,刷新令牌7天到30天。过期后通过刷新令牌获取新令牌,减少Token泄露的影响。用户修改密码或登出时,所有Token应立即失效。实现方式有刷新令牌轮换和Token黑名单两种。刷新令牌轮换更优雅:每次刷新令牌时同时撤销旧刷新令牌并发放新令牌。Token黑名单将作废的Token加入Redis,每次请求时检查。

聊聊你的项目

有架构或成本优化的烦恼?

把你的业务场景告诉我们,专家会给出一份务实的改造与降本建议。


电话咨询 微信咨询 在线咨询 返回顶部
xycx202108

微信扫码咨询

×