前端所需API凭证如何在后端安全存储并可在前端解密使用
存储方案说明
你需要的是可恢复明文的对称加密存储方案,注意绝对不能用密码存储常用的不可逆哈希算法(比如bcrypt、Argon2),这类算法无法还原明文,满足不了前端需要使用明文密钥的需求。
后端存储规范
- 所有API密钥明文必须先加密再存入数据库,禁止明文存储,避免数据库泄露后所有密钥被批量盗取。
- 加密算法优先选择
AES-256-GCM,这是目前行业通用的高安全级别对称加密算法,自带数据完整性校验,可以避免密文被篡改后解密出非法内容。 - 加密用的全局主密钥禁止和业务数据存在同一数据库,必须存储在服务端本地环境变量、或者专用的内部密钥管理组件中,只有后端服务运行时可读取,永远不对外暴露。
- 条件允许的话可以给每个用户生成独立的用户加密密钥,用主密钥加密用户密钥后再和用户数据绑定存储,进一步缩小泄露影响范围。
密钥下发到前端的安全规则
如果必须要前端拿到明文密钥使用,严格遵循以下流程:
- 只有用户完成身份校验、拿到有效登录会话后,才允许申请密钥
- 密钥解密操作全程在后端服务内部完成,永远不要把主密钥、或者未做二次加密的密钥明文返回给前端
- 后端解密出密钥明文后,用当前用户会话独有的临时密钥做一次二次加密,再把二次加密后的密文返回给前端,临时密钥与会话生命周期绑定,会话过期后自动失效
- 前端拿到密文后用当前会话的临时密钥解密出明文使用,明文建议只保存在运行内存中,不要持久化存储到localStorage、本地文件等位置,页面关闭后自动销毁降低泄露风险
优先推荐的更安全方案
如果你的API密钥是用来调用第三方服务接口,优先走后端代理模式:
前端不需要拿到密钥明文,所有需要用到该密钥的请求都先发送到你的自有后端,后端在服务内部拼装请求参数、带上存储的API密钥发起第三方调用,拿到返回结果后再透传给前端。
这个方案前端全程接触不到密钥明文,从根源上避免了前端侧密钥泄露的风险,是同类需求的行业首选实现方式。
内容的提问来源于stack exchange,提问作者FreeLand
相关产品推荐
相关产品推荐

