当前位置: 首页 > wzjs >正文

郑州专业旅游网站建设姓名查询

郑州专业旅游网站建设,姓名查询,上海城乡建设厅网站,外贸营销型网站建设公司API实现参数签名验证 什么是API参数签名 客户端向服务端发送API请求时,为了防止参数被篡改,在请求前将参数进行签名,并将签名随参数一起发送给服务端服务端收到请求后,通过签名算法对签名进行验证,从而判断参数是否被…

API实现参数签名验证

什么是API参数签名

  • 客户端向服务端发送API请求时,为了防止参数被篡改,在请求前将参数进行签名,并将签名随参数一起发送给服务端
  • 服务端收到请求后,通过签名算法对签名进行验证,从而判断参数是否被篡改
  • 如果签名验证不通过,表示参数被篡改,拒绝请求。

安装插件

  • 我们可以使用插件来实现参数签名验证
  • 访问官方插件市场,下载参数签名验证插件

  • 将下载的插件拷贝到DBAPI安装目录下的extlib目录,并重启DBAPI服务

API配置

  • 修改API

  • 添加一个string类型的参数sign,用于存放签名。

  • 全局插件-参数处理中选择此插件,并填写插件参数
{"algorithm": "md5", "secretKey": "123456"}

注意这个secretKey是跟客户端约定好的字符串密钥,除了给指定客户端使用,不能泄露给任何人,客户端需要用此密钥来计算签名sign

客户端如何使用

  • 客户端在访问API的时候,需要将所有参数名(除了sign外)和secretKey先进行字典顺序排序
  • 然后将上一步的每个参数名和参数值用=拼接
  • 上一步得到的每一个字符串再用&符号拼接起来
  • 上一步得到的字符串用加密算法(具体采用哪个算法,取决于API的插件参数填写的algorithm)加密,得到一个新的字符串,这个字符串作为参数sign的值,要传给API
  • DBAPI接受到请求后,插件就会用同样的方式拼接参数字符串,然后加密成一个字符串,与sign值进行比较,如果相同,表示参数没有被篡改,可以继续处理请求,否则拒绝请求

客户端调用API示例

需求

  • API定义了3个参数name age sign, 此API使用了签名验证插件并填写了插件参数值{"algorithm": "md5", "secretKey": "123456"}
  • 您需要访问此API并传递以下参数
{"name": "John", "age": 18}

实现

  • 先将name age secretKey 按字典顺序排序得到["age","name","secretKey"]
  • 按顺序拼接每个参数的名称和值得到字符串age=18&name=John&secretKey=123456
  • 将字符串age=18&name=John&secretKey=123456使用md5算法加密得到字符串fa2ffa3f33779f2453e5da82c671ce6a
  • 将字符串fa2ffa3f33779f2453e5da82c671ce6a作为sign参数值传入API
  • 也就是访问API的时候必须发送实际的参数为
{"name": "John", "age": 18, "sign": "fa2ffa3f33779f2453e5da82c671ce6a"}
  • 以python为例的访问API代码如下
import hashlib
import requests
from urllib import parse# 原始参数值
params = {"name": "John", "age": 18}# 添加secretKey
params["secretKey"] = "123456"# 取出所有参数名
keys_list = list(params.keys())# 对参数名进行排序
keys_list = sorted(keys_list)# 将每个键和值用 = 拼接,然后用 & 拼接
result = '&'.join(f"{key}={params[key]}" for key in keys_list)
print(result)  # age=18&name=John&secretKey=123456#使用md5算法加密
sign = hashlib.md5(result.encode()).hexdigest()
print(sign)  # fa2ffa3f33779f2453e5da82c671ce6a# params删除secretKey
params.pop("secretKey")# 添加sign
params["sign"] = signprint(params)  # {'name': 'John', 'age': 18, 'sign': 'fa2ffa3f33779f2453e5da82c671ce6a'}# 将{'name': 'John', 'age': 18, 'sign': 'fa2ffa3f33779f2453e5da82c671ce6a'}作为参数访问API
requestUrl = 'http://127.0.0.1:8520/api/xxx'
headers = {'Content-Type': 'application/x-www-form-urlencoded'
}
data = parse.urlencode(params, True)
response = requests.post(requestUrl, headers=headers, data=data)
print(response.status_code)
print(response.text)
http://www.dtcms.com/wzjs/304968.html

相关文章:

  • 呼和浩特做网站公司朝阳网站建设公司
  • 做网站需要的素材资料店铺引流的30种方法
  • 重庆网站推广招聘卡点视频软件下载
  • wordpress如何跳转页面步骤杭州seo网站推广排名
  • 做网站的不足 心得网站关键词排名分析
  • 网站界面技术方案如何申请网站域名流程
  • 网站虚拟主持人济南最新消息今天
  • 山东营销网站建设联系方式nba最新消息新闻
  • 中国社交网站做多外国人的什么是引流推广
  • 深圳营销型网站建设优化seo优化网站的注意事项
  • 专门做油画交流的网站网站推广怎么优化
  • 住房城乡建设管理网站免费的网站关键词查询工具
  • 武汉做网站jw100广东seo价格是多少钱
  • 做个人网站到哪里做鹤壁搜索引擎优化
  • 网站后续建设说明seo研究中心好客站
  • 好的网站建设商家免费浏览外国网站的软件
  • java做网站赚钱太原百度关键词优化
  • 网站自适应尺寸百度推广网站
  • 房地产公司网站开发做销售怎样去寻找客户
  • 四川建设厅网站 蒋seo优化方案报价
  • 深圳微信网站公司哪家好seo外包网络公司
  • wordpress插件 二次开放网站seo好学吗
  • 企业网站营销如何建设世界杯比分查询
  • 什么是内容管理系统安卓优化大师官方版
  • 学平面设计的网站针对本地的免费推广平台
  • 兰州做网站怎么样网络推广培训班
  • 免费1级做爰片在线观看 历史网站seo站长工具是什么
  • java 框架用来做网站免费学生html网页制作成品
  • 成都市金堂县网站建设厦门小鱼网
  • 张家港市凤凰镇建设局网站数据分析培训机构哪家好