`

开放api接口签名验证(zt)

阅读更多

转帖地址:https://www.cnblogs.com/codelir/p/5327462.html

不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面临着许多的安全性问题,例如:

  1. 请求来源(身份)是否合法?
  2. 请求参数被篡改?
  3. 请求的唯一性(不可复制)


为了保证数据在通信时的安全性,我们可以采用参数签名的方式来进行相关验证。

案列分析

我们通过给某 [移动端(app)] 写 [后台接口(api)] 的案例进行分析:     

   客户端: 以下简称app   

后台接口:以下简称api


我们通过app查询产品列表这个操作来进行分析:

app中点击查询按钮==》调用api进行查询==》返回查询结果==>显示在app中

上代码啦 -_-!

一、不进行验证的方式

api查询接口:

app调用:http://api.test.com/getproducts?参数1=value1.......

如上,这种方式简单粗暴,通过调用getproducts方法即可获取产品列表信息了,但是 这样的方式会存在很严重的安全性问题,没有进行任何的验证,大家都可以通过这个方法获取到产品列表,导致产品信息泄露。
那么,如何验证调用者身份呢?如何防止参数被篡改呢?


二、MD5参数签名的方式

我们对api查询产品接口进行优化:

1.给app分配对应的key、secret

2.Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下: 

    a. 按照请求参数名称将所有请求参数按照字母先后顺序排序得到:keyvaluekeyvalue...keyvalue  字符串如:将arong=1,mrong=2,crong=3 排序为:arong=1, crong=3,mrong=2  然后将参数名和参数值进行拼接得到参数字符串:arong1crong3mrong2。 

    b. 将secret加在参数字符串的头部后进行MD5加密 ,加密后的字符串需大写。即得到签名Sign


新api接口代码:

app调用:http://api.test.com/getproducts?key=app_key&sign=BCC7C71CF93F9CDBDB88671B701D8A35&参数1=value1&参数2=value2.......

注:secret 仅作加密使用, 为了保证数据安全请不要在请求参数中使用。

 

如上,优化后的请求多了key和sign参数,这样请求的时候就需要合法的key和正确签名sign才可以获取产品数据。这样就解决了身份验证和防止参数篡改问题,如果请求参数被人拿走,没事,他们永远也拿不到secret,因为secret是不传递的。再也无法伪造合法的请求。


但是...这样就够了吗?细心的同学可能会发现,如果我获取了你完整的链接,一直使用你的key和sign和一样的参数不就可以正常获取数据了...-_-!是的,仅仅是如上的优化是不够的


请求的唯一性:

为了防止别人重复使用请求参数问题,我们需要保证请求的唯一性,就是对应请求只能使用一次,这样就算别人拿走了请求的完整链接也是无效的。
唯一性的实现:在如上的请求参数中,我们加入时间戳 :timestamp(yyyyMMddHHmmss),同样,时间戳作为请求参数之一,也加入sign算法中进行加密。


新的api接口:

app调用:
http://api.test.com/getproducts?key=app_key&sign=BCC7C71CF93F9CDBDB88671B701D8A35&timestamp=201603261407&参数1=value1&参数2=value2.......


如上,我们通过timestamp时间戳用来验证请求是否过期。这样就算被人拿走完整的请求链接也是无效的。


Sign签名安全性分析:

通过上面的案例,我们可以看出,安全的关键在于参与签名的secret,整个过程中secret是不参与通信的,所以只要保证secret不泄露,请求就不会被伪造。

总结

上述的Sign签名的方式能够在一定程度上防止信息被篡改和伪造,保障通信的安全,这里使用的是MD5进行加密,当然实际使用中大家可以根据实际需求进行自定义签名算法,比如:RSA,SHA等。

 

源码下载:

源代码:http://git.oschina.net/daimali/Daimali.ISV

欢迎关注个人技术类公众号CodeL

分享到:
评论

相关推荐

    zt-exec-1.9-API文档-中文版.zip

    包含翻译后的API文档:zt-exec-1.9-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.zeroturnaround:zt-exec:1.9; 标签:zeroturnaround、zt、exec、中文文档、jar包、java; 使用方法:解压翻译后的API文档,...

    Android 请求 WebAPI的案例

    2. **创建API接口** 创建一个接口,定义你需要调用的WebAPI方法。使用注解`@GET`、`@POST`等标注HTTP方法,URL可以是相对路径或者完整URL。 ```java public interface ApiService { @GET("api/data") Call...

    zt-exec-1.9-API文档-中英对照版.zip

    包含翻译后的API文档:zt-exec-1.9-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.zeroturnaround:zt-exec:1.9; 标签:zeroturnaround、zt、exec、中英对照文档、jar包、java; 使用方法:解压翻译...

    ZT短信平台接口开发文档

    ZT短信平台接口开发文档

    zt411-zt421-ug-zhcn_ZT411/ZT421_斑马打印机手册_

    斑马打印机ZT411和ZT421是工业级条码和标签打印机,广泛应用于制造业、物流、零售业等对打印质量和效率有高要求的领域。这两款打印机以其出色的性能、耐用性和易用性赢得了用户的信赖。这份中文手册详细地介绍了ZT...

    ZT213/ZT213LEEA规格书V2.10-低功耗RS232多通道USB收发器/驱动器芯片手册

    ZT213/ZT213LEEA是由知名半导体制造商推出的高性能USB到串行接口转换芯片,旨在提供可靠、高效的RS232通信解决方案。该芯片支持多通道操作,能够同时处理多个串行接口,极大地提升了系统的并行处理能力。其低功耗...

    ztadmin:ZeroTier One管理API的可编写脚本的接口

    ZTAdmin 是一项软件定义的网络服务,无论您在何处,都可以在所有计算机之间创建可扩展的安全P2P虚拟网络。... ##当前功能:由于ZeroTier API已更改并且该工具以前不是非常模块化,因此我正在对该工具进行

    斑马打印机,Java调用官方API架包及调用样例

    在实际应用中,为了提高代码的可维护性和复用性,建议将这些API调用封装到单独的类或服务中,提供统一的接口供其他模块调用。此外,可以结合Apache Commons Lang等工具库,增强代码的健壮性和易用性。 总之,斑马...

    ZT7548 Datasheet Rev.1.0.3.pdf

    ZT7548是一款第五代电容式触控屏幕控制器,支持30x18或18x30的通道配置,可以同时检测最多10个触点。该控制器能够与最多8个键与TSP(触控屏面板)或FPC(柔性印刷电路板)模式一起工作,在多点触控时无扫描率下降的...

    斑马zt410中文库

    - 网络连接:具备以太网、Wi-Fi、串口和USB等多种接口,便于集成到各种网络环境中。 - 用户友好:直观的彩色LCD显示屏简化了设置和操作流程。 - 耐用性:金属框架结构设计,保证长期稳定工作,适合工业环境。 2....

    Zebra ZT230 条码打印机驱动

    - 对于ZT230系列,除了传统的USB接口外,还支持以太网连接,可以方便地集成到网络环境中,实现远程管理和批量打印。 9. **软件支持** - Zebra提供了一系列配套软件,如ZebraDesigner,可以帮助用户设计标签、预览...

    证通ZT598金属键盘开发资料.rar

    在证通ZT598的SDK中,接口说明文档详细阐述了如何与硬件进行通信,包括发送指令、接收反馈、处理错误等方面,是开发者理解和控制设备的基础。这些接口可能包括初始化键盘、读取按键输入、设置键盘状态等功能。 用例...

    ZT410打印机IP地址设置网络打印机

    ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机

    RS485通信芯片zt13085e的原理图库和PCB库

    RS485通信芯片ZT13085E是一种常用的工业级串行通信接口芯片,主要用于构建远程、多节点的通信网络。在工业自动化、楼宇自动化、物联网设备等领域有广泛应用。ZT13085E的设计目标是提供一种高效、可靠的数据传输方式...

    斑马打印机(ZT210).docx

    接着,指定打印机接口为“USB001(USB虚拟打印机端口)”,并选择打印机型号为“ZDdesigner”的ZT210-200dpi ZPL版本。根据首次安装的情况选择相应的安装选项,通常第一次安装选择“创建新端口”,其他情况可选择...

    斑马打印机ZT210用户指南

    "斑马打印机ZT210用户指南" 本用户指南旨在为Zebra ZT210/ZT220/ZT230打印机的用户提供操作和维护指南,该设备是一种工业级的条码打印机,具有高速打印、高速处理和高质量打印输出等特点。 版权信息 本手册的版权...

    斑马ZT510打印机驱动文件

    斑马ZT510打印机驱动文件

    斑马ZT230驱动及网络打印机设置代码

    1. **网络配置**:斑马ZT230支持有线以太网连接,可以通过网络接口设置IP地址。这通常在打印机的控制面板或通过打印机的网络配置工具完成。确保打印机与计算机在同一局域网内。 2. **IP设置**:使用静态IP地址可...

    斑马zt210打印机驱动 v5.1.07.5146 官方版

    斑马zt210是一款专为中国市场设计的工业条码打印机,非常适合不需要频繁更换标签的条码标签应用。这里给大家提供斑马zt210驱动下载,推荐有需要的用户下载安装。斑马zt210打印机优势:◆ 节省空间* 小巧紧凑和流线型...

Global site tag (gtag.js) - Google Analytics