用时间戳 + 密钥 + MD5 签名保护接口调用安全(Java 完整实现)
一、为什么需要接口签名
当系统 A 调用系统 B 的接口时,面临以下安全风险:
| 风险 | 描述 | 后果 |
|---|---|---|
| 伪造请求 | 攻击者模拟系统 A 发起请求 | 系统 B 被非法访问 |
| 参数篡改 | 中间人修改请求参数 | 数据被恶意修改 |
| 重放攻击 | 截获合法请求后重复发送 | 重复操作(如重复支付) |
签名机制的作用:让系统 B 能验证"这个请求确实是系统 A 发的,参数没被改过,且不是过期的旧请求"。
二、核心概念
1. 密钥(Secret Key)
双方事先约定的一个字符串,只有通信双方知道,不在网络上传输。
系统A 密钥:abc123xyz(配置在 application.yml 中) 系统B 密钥:abc123xyz(配置在自己的服务中)</