首页 > 其他分享 >API 中签名的使用

API 中签名的使用

时间:2022-11-11 15:33:39浏览次数:55  
标签:appKey 加密 请求 API 参数 签名 使用 SECERT

 

    今天一同事沟通接口服务签名问题,特整理了一下,便于他人查阅。

 



一、为什么要签名?



    接口服务需要解决的三个问题



  1. 请求是否合法:是否是我的信任方
  2. 请求是否被篡改:是否被第三方劫持并篡改参数
  3. 防止重复请求(防重放):是否重复请求



二、签名生成规则



    那么数据保有方为了控制调用权限,会为应用端分配唯一的appKey 、 appSecert和预定义的加密方式。



  • appKey :为保证该调用请求是服务方认可的调用方发出的,保证请求方唯一性(如 test01,如果发现 appKey 不再注册库中则认为该请求方不合法)
  • appSecert :增加暴力解密的难度(通常是一段密文,如 SECERT_A)
  • 预定义加密方式:双方约定好的加密方式(一般为散列非可逆加密,如 MD5、SHA1)



    ok,我们设定签名设成规则:



    1)将 APPKey 加入值请求参数 



​         http://www.sample.com/openapi/getmessage?appKey=test01&name=spiderman&movie=Spider-Man:Homecoming ​



    2)将每个请求参数去除“=”,按ASCII升序按“参数1参数值1参数2参数值2……”的格式组成特定的字符串



        appKeytest01movieSpiderManHomecomingnamespiderman



    3)将秘钥SECERT_A加入上述字符串的前后成为



        SECERT_AappKeytest01movieSpiderManHomecomingnamespidermanSECERT_A



    4)按约定方式(如 md5)加密:2995c83bbc12b147c9b5645396e5700e6af92b7f



    5)拼接所有参数,组成API请求



    第4步生成的字符串,就是我们的签名sign,也作为一个查询参数加入到我们的请求中那么请求就变成了:



www.sample.com/openapi/getmessage?name=spiderman&movie=Spider-Man:Homecoming&sign=2995c83bbc12b147c9b5645396e5700e6af92b7f



    平台服务器在接到这个请求之后,会将请求包中的所有参数按以上相同的方式进行加密。如果生成的参数签名一致,则签名通过,请求的合法性和请求参数都得到保护,不会被第三方劫持后篡改变为它用。



 



三、签名中是否需要时间戳



    签名的时间戳是防重放(重复请求)的, 只要有个过期时间就好了,例如1分钟过期。



    可以利用的签名生成规则:参数字典序排序+时间戳+密钥,然后md5



    注意:服务器端生成的签名不是用的服务器时间, 是用的客户端给过来的时间参数(防止时间戳获取不同源)



 



四、总结



      按照以上的签名规则,最重要的秘钥是 appSecert,是每个调用方打死也不能告诉他人的参数,因为它不参与通讯,仅仅作为请求端和服务端两方知道的秘钥保证签名的唯一性。当然了有些平台也提供 IP 白名单服务,可以进一步防止Open API 被冒用。


标签:appKey,加密,请求,API,参数,签名,使用,SECERT
From: https://blog.51cto.com/u_15107509/5845046

相关文章

  • 生命科学公司如何使用 OKR
    最近,生命科学领域的情况看起来相当乐观。仅在2020年至2021年期间,对生物技术的投资就翻了一番,投资者向快速增长的行业投入了340亿美元的资金。 健康的投资通常意味......
  • 用(Atomic原子类 使用)实现自增
    //静态变量存储最大值privatestaticfinalAtomicIntegeratomicNum=newAtomicInteger();privatestaticfinalIntegerINIT_CODE_NUM=0;publicStringgetCode......
  • 镜像仓库 Harbor搭建和使用教程
     架构Docker搭建yumupdateyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2yum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/l......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的1.能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;2.能够编写程序调用RyuRESTAPI实现特定网络功能。二、实......
  • SQLSERVER 使用PIVOT、UNPIVOT实现行转列与列转行!!!
    原文链接:https://www.cnblogs.com/wypd/archive/2022/05/07/16242851.html一、使用PIVOT实现行转列1、首先创建一个学生表CREATETABLE[dbo].[Students](   ......
  • java使用mybatis-generator实现自动生成model、dao、xml
    pom中添加插件<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifa......
  • 1.docker的基本使用
    1.简介Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟......
  • 【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序
    最近通过PyQt5设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享。PyQt5是一套Python绑定DigiaQt5应用的框架,是最强大的GUI库......
  • Spring两大核心IOC容器、AOP的使用及总结
    Spring两大核心IOC容器、AOP的使用及总结​Spring框架体系中核心就是IOC容器,IOC容器中文直译为控制反转,顾名思义也就是将组件的控制权交给IOC容器,IOC容器负责管理......
  • Android--调用百度地图API
    首先申请一个百度地图的APIKEY,具体方法网上已有,申请后获得:main.xml代码如下:<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:to......