API Key是服务端到服务端接口调用的基础认证方式。密钥一旦泄露,攻击者就可以冒充合法客户端调用API。本文分享API Key从生成到废弃的全生命周期管理方案,帮助开发者建立安全的密钥管理体系。
密钥生成策略
好的密钥需要足够随机且不易猜测。推荐使用crypto库生成32字节以上的随机字节,然后进行Base64编码。密钥格式可以是 sk_live_xxxxx 形式,前缀标识密钥类型和环境(测试/生产)。不推荐使用UUID作为API Key,因为UUID的随机性不足且包含固定模式。为每个客户端生成唯一的Secret密钥用于签名验证,进一步提升安全性。
密钥安全存储
密钥存储是最容易出现问题的环节。服务端存储API Key时,不要明文存储,应该存储密钥的哈希值(如bcrypt或SHA-256)。客户端存储API Key时,放在环境变量或配置文件中,不要硬编码在代码里。前端代码中绝对不能存放API Key。对于移动端应用,可以将API Key存储在系统密钥链中。密钥库如Vault或AWS Secrets Manager可以提供企业级的密钥管理能力。
密钥验证与限流
API Key验证流程:从请求头或参数中提取密钥,查找对应的客户端信息和权限配置,验证密钥有效性,检查请求频率是否超限。推荐将密钥和客户端信息的映射缓存到Redis中加速验证。每个API Key关联独立的限流策略,防止单个客户端影响其他客户端的正常使用。密钥验证日志需要记录但不记录完整密钥,只记录密钥的前几位用于问题定位。
密钥轮换与撤销
定期轮换密钥是良好的安全习惯。提供密钥轮换API,客户端可以使用旧密钥换取新密钥,旧密钥在缓冲期(如24小时)内仍然可用。对于疑似泄露的密钥,管理员应能立即撤销。撤销后的密钥加入黑名单,验证时检查黑名单。密钥轮换和撤销需要及时同步到所有服务节点,可以使用Redis发布订阅或配置中心实现。