API 加签的意义
- 身份验证:在网络交互中,服务器需要确定请求的来源是否可靠。通过对请求进行加签,服务器可以验证请求是否来自合法的客户端。客户端使用独特的密钥进行签名操作,服务器能够依据已知的密钥信息对签名进行校验,只有签名验证通过,才能确认请求源自合法身份,有效阻止冒充合法用户或系统发出恶意请求的行为。
- 数据完整性保护:在网络传输过程中,数据可能会因为网络故障、中间节点篡改等原因而遭到破坏。加签技术通过对请求数据生成签名,在请求到达服务器时,服务器重新对收到的数据进行签名计算并与请求中携带的签名对比。如果签名不一致,说明数据在传输过程中被修改,服务器可以拒绝处理该请求,确保接收到的数据和发送端发出的数据一致,保障数据完整性。
- 防止重放攻击:重放攻击是攻击者捕获合法请求,然后在后续某个时间再次发送相同请求来达到非法目的。API 加签通过在签名计算中引入如时间戳、随机数等动态因素,每次请求生成的签名不同。服务器通过验证时间戳的时效性或者随机数的唯一性,能够识别出重复发送的请求并将其拒绝,有效抵御重放攻击,保障系统安全性。
- 实现不可抵赖性:加签操作是基于客户端私钥完成的,只有持有该私钥的客户端才能生成对应的签名。一旦服务器收到合法签名的请求并进行记录,客户端将无法否认发起过该请求。这在涉及责任认定和业务追溯时至关重要,比如在线交易、电子合同签署等场景,不可抵赖性保证了交易双方的权益和交易过程的可问责性。
签名认证方式
1. 初始化配置
API 拥有者为每个获授权的 APP 分配一对签名密钥,即 APP Key 和 APP Secret ,并明确规定该 APP 可用的签名算法(如 HMAC – SHA256、RSA 等)及签名版本。这些信息会被 API 拥有者记录在系统中,并告知相应的 APP 开发者。
签名算法的配置如下图:
2. 客户端签名生成
在客户端发起 API 请求时:
- 明确请求要素:首先确定待签名的关键请求数据,包括请求参数、请求方法(如 GET、POST)、请求路径以及可能的时间戳或随机数等,以确保请求的唯一性和完整性。
- 获取签名信息:从本地配置读取分配到的 APP Key 和 APP Secret ,以及当前使用的签名版本号与算法。
- 执行签名计算:按照指定的签名算法,利用 APP Secret 对选定的请求关键数据进行加密签名计算,生成签名值。
- 添加签名信息到请求头:将 APP Key、签名版本号、签名算法及生成的签名值添加到 HTTP 请求的 Header 中。例如:
X-Ca-Key: [APP Key的值] X-Ca-Nonce:[每次签名的唯一值] X-Ca-Ver: [版本号] X-Ca-Timestamp: [签名时间戳] X-Ca-Signature: [生成的签名值] X-Ca-Signature-Header-In:[参与签名的请求头:如X-Access-Token]
3. API 网关认证过程
API 网关收到客户端的请求后:
- 提取签名信息:从请求 Header 中读取 APP Key、签名版本号、签名算法及客户端传来的签名值。
- 查询密钥:依据读取的 APP Key,在内部存储中查找对应的 APP Secret 。
- 重新计算签名:根据提取的签名版本号,确定使用的签名规则,利用查找到的 APP Secret 以及与客户端相同的关键请求数据,依照指定的签名算法重新计算签名值。
- 对比签名:将重新计算得到的签名值与客户端传来的签名值进行比对。
4. 认证结果处理
- 认证通过:若重新计算的签名值与客户端传来的签名值一致,表明请求的签名认证通过。API 网关将请求转发至后端服务进行正常处理。
认证失败:如果两者不一致,API 网关判定该请求为非法请求,不会将其转发给后端服务,并向客户端返回包含错误信息的应答,如错误码和简要的错误描述,告知客户端签名验证失败及可能原因。
验签的时序图如下
备注:
签名算法已配置在后台,在接口传输中,就不需要再指定签名算法了
如在内测之家,前端站点的参与签名的结构如下(secret仅参与签名、不能传输哦):仅仅是个示例哦
method:POST uri:/ums-api/api/auth/xxxxxxxx header:x-access-token:bJW8yvKhfzFpALIuRQwTF1nR1w0w9VYL1u-kespeRX5ZKQmE9tLVWxXLHPoFg2Qp x-ca-key:xxxxxxxxx x-ca-nonce:7124736198582272 x-ca-timestamp:1739437548482 x-ca-ver:1.0 x-enc-encrypted:true body:{"content":"kahVs+fBsFONMhM59bQkCBHd8uIEKicSLYUUF+/S5wkLkksZeoL1ol4tlgOsgT2Bla4sAzAHoG+xsG7PpFx0Xy4+hSOg8XIXsuI9myq99NHXlwtuuaAMqrqJqzB1SmUDmT01N9JyxCN5z3IKNbQ1u13Ew26gox8i11fK2rLrJFw1VJrNx5oYtchp9fQpJiq5FzXDpT+7QPgU8ig+plhSwA==","encryptKey":"lM6ERxG4OzBNWtb0ygQXT5IKdaJ4LHYB/RyN8lT3LJmWy3Jw6ecPaYv5Ck51t4QPuBR02Pr0yMYeecM/Skuqva9ubtDDXsIzoOUC2az88m5jpFbt5qUVsSUtqMiTcYTwN/EDJjctI8KFTqGEL9YVz4089EGIjx9yOj1VAnAMUOo="} secret:xxxxxxxxxx
传输的请求头如下
x-access-token:bJW8yvKhfzFpALIuRQwTF1nR1w0w9VYL1u-kespeRX5ZKQmE9tLVWxXLHPoFg2Qp x-ca-key:xxxxxxxx x-ca-nonce:7124736198582272 x-ca-signature:bPvxDcJZzQ9l8Si1I2M6lPWpZfhvt7U3p6Ese2YgWWI= x-ca-signature-header-in:X-Access-Token, x-ca-timestamp:1739437548482 x-ca-ver:1.0 x-time-zone:Asia/Shanghai
内测之家–beta.forsoo.com
来源链接:https://www.cnblogs.com/thankgoodness/p/18714025
© 版权声明
本站所有资源来自于网络,仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您(转载者)自己承担!
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
如有侵犯您的版权,请及时联系3500663466#qq.com(#换@),我们将第一时间删除本站数据。
THE END
暂无评论内容