内测之家-安全机制-签名(一)

news/2025/2/13 17:13:51/文章来源:https://www.cnblogs.com/thankgoodness/p/18714025

API 加签的意义

  1. 身份验证:在网络交互中,服务器需要确定请求的来源是否可靠。通过对请求进行加签,服务器可以验证请求是否来自合法的客户端。客户端使用独特的密钥进行签名操作,服务器能够依据已知的密钥信息对签名进行校验,只有签名验证通过,才能确认请求源自合法身份,有效阻止冒充合法用户或系统发出恶意请求的行为。
  2. 数据完整性保护:在网络传输过程中,数据可能会因为网络故障、中间节点篡改等原因而遭到破坏。加签技术通过对请求数据生成签名,在请求到达服务器时,服务器重新对收到的数据进行签名计算并与请求中携带的签名对比。如果签名不一致,说明数据在传输过程中被修改,服务器可以拒绝处理该请求,确保接收到的数据和发送端发出的数据一致,保障数据完整性。
  3. 防止重放攻击:重放攻击是攻击者捕获合法请求,然后在后续某个时间再次发送相同请求来达到非法目的。API 加签通过在签名计算中引入如时间戳、随机数等动态因素,每次请求生成的签名不同。服务器通过验证时间戳的时效性或者随机数的唯一性,能够识别出重复发送的请求并将其拒绝,有效抵御重放攻击,保障系统安全性。
  4. 实现不可抵赖性:加签操作是基于客户端私钥完成的,只有持有该私钥的客户端才能生成对应的签名。一旦服务器收到合法签名的请求并进行记录,客户端将无法否认发起过该请求。这在涉及责任认定和业务追溯时至关重要,比如在线交易、电子合同签署等场景,不可抵赖性保证了交易双方的权益和交易过程的可问责性。

签名认证方式

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 网关判定该请求为非法请求,不会将其转发给后端服务,并向客户端返回包含错误信息的应答,如错误码和简要的错误描述,告知客户端签名验证失败及可能原因。

验签的时序图如下

  备注:
    签名算法已配置在后台,在接口传输中,就不需要再指定签名算法了
    如在内测之家,前端站点的签名结构如下:仅仅是个示例哦
    

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

  内测之家--beta.forsoo.com

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/883294.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

支付宝 IoT 设备入门宝典(上)设备管理篇

相信不少朋友最近都被支付宝“碰一下”广告刷屏,“不用打开APP 支付就碰一下”几个字一出简直自带BGM……其实“碰一下”就是支付宝 IoT 设备的一种,趁着热度还在,我会分为设备管理和设备经营上下两篇,简单介绍一下支付宝 IoT,以及在日常使用管理中的常见问题解决方案,本…

【贪心】区间问题

最大不相交区间数量 演唱会、计算最多能观看几场演出样例1 输入 2 720 120 840 120输出 1样例2 输入 2 0 60 75 60输出 2C++代码 // Problem: #OD268. 演唱会、计算最多能观看几场演出 // Contest: Hydro // Memory Limit: 256 MB // Time Limit: 1000 ms // 区间问题:求最大不…

第五讲 搜索算法

第一题 自然数的拆分思路: 1.通过递归的方式将每个数从1开始拆分 2.每次拆分的后一个数大于等于前一个数,确保拆分结果不重复第二题 填涂颜色思路: 1.将外圈的0也都围成圈 2.只需将剩下的0变成2第三题 显示图像AC代码:第四题 健康的荷斯坦奶牛AC代码:

vxe-table 展开行的使用,子表复杂渲染,解决固定列与展开行重复渲染问题

vxe-table 展开行的使用,子表复杂渲染,解决固定列与展开行重复渲染问题,需要注意最新版本才支持 官网:https://vxetable.cn 同时支持虚拟滚动和展开行与固定列、子表复杂渲染,需要注意最新版本才支持使用 <template><div><vxe-grid v-bind="gridOptio…

【重磅发布】 免费领取阿里云百炼AI大模型100万Tokens教程出炉,API接口实战操作,DeepSeek-R1满血版即刻体验!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注什么是阿里云百炼? 阿里云的大模型服务平台百炼是一站式的大模型开发及应用构建平台。 不论是开发者…

段码屏驱动控制器/最大可支持144的LCD液晶显示屏驱动芯片VK1056C SSOP24

产品品牌:永嘉微电/VINKA 产品型号:VK1056C 封装形式:SSOP24 概述 VK1056C是一个点阵式存储映射的LCD驱动器,可支持最大 56点(14SEG 4COM)的LCD屏, 也支持2COM和3COM的 LCD屏。单片机可通过三条通信线配置显示参数和发送显示 数据,也可通过指令进入省电模式。LJQ4055特…

Redis 持久化原理分析和使用建议

本文主要介绍了 Redis 提供的三大持久化机制,即 AOF 日志、RDB 快照以及混合持久化机制。作者:来自 vivo 互联网存储团队- Qiu Xu 本文主要介绍了 Redis 提供的三大持久化机制,即 AOF 日志、RDB 快照以及混合持久化机制。一、Redis 为什么需要进行持久化 Redis 为了保证性…

微积分重点回忆

一、微分 用求导来得到微分,也就是函数的变化量。 一阶导数:求一阶导数,之前在校时,大部分人接触它,主要是为了求极值。也就是另f`(x)=0的时候,这个x代入后的f(x)就是极值。实际上,求一阶导数,几何意义就是求变化率,所以,对于路程求时间的导数,就是速度,对于一个曲…

springai +embeding 模型 +elasticsearch

项目pom.xml1 <?xml version="1.0" encoding="UTF-8"?>2 <project xmlns="http://maven.apache.org/POM/4.0.0"3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4 xsi:schemaLocation="ht…

川崎机器人维修kasawaki维护注意事项

为确保川崎机械臂的正确安全操作、防止人员伤害和财产损失,请遵守下述方框符号表达的安全信息。 ——注意事项 在进行Kasawaki川崎机器人维修操作前,请注意如下事项以确保安全。 1. 在开始检查之前,请务必断开控制器电源及元电源。设置一个“检查及维护中”的醒目标志牌,将…

【字符串处理、STLset】获取set首元素值的方法

获取set首个元素值的方法 作用:因为STLset有自动排序的功能,所以有时需要获取set的首元素作为字典序最小来进一步处理。 方法:在h.begin()前面加星号*即可获取set首个元素的值 set<char> h; cout << *h.begin();例题:字符串化繁为简示例1 输入 ()abd输出 abd说…

javascript语法1

紫色部分可省略 浏览器控制台要打开开发者工具(f12)才能看见