`

API 中签名的使用

    博客分类:
  • PHP
阅读更多

PS:原创文章,如需转载,请注明出处,谢谢!     

本文地址:https://www.iteye.com/blog/flyer0126-2512379

 

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

 

一、为什么要签名?
    接口服务需要解决的三个问题
  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 被冒用。
分享到:
评论

相关推荐

    API接签名验证

    在公网环境中,API接口如果不进行适当的保护,可能会遭受各种恶意攻击,如数据篡改、中间人...在设计和实现API签名验证时,开发者需要注意选择安全的算法,合理设置签名有效期,以及妥善保管私钥,以确保系统的安全性。

    WebApi 使用TOKEN+签名验证

    "WebApi使用TOKEN+签名验证"是一种常见的安全策略,它结合了令牌(Token)验证和签名机制,以确保只有授权的客户端能够访问服务。下面将详细介绍这两种方法及其在实际应用中的实现。 1. **令牌(Token)验证**: ...

    WebApi安全性 使用TOKEN+签名验证.zip

    WebApi token+签名认证的主要原理是:1.做一个认证服务,提供一个认证的webapi,用户先访问它获取对应的token 2.用户拿着相应的token以及请求的参数和服务器端提供的签名算法计算出签名后再去访问指定的api  3....

    Python-Api签名验证样例

    - 时间戳:在签名中加入时间戳可以防止重放攻击,即拒绝已过期的请求。 总结,Python API签名验证是API安全的重要一环,通过理解HMAC算法和Flask框架的应用,我们可以构建出安全可靠的API服务。`flask-apiSign-...

    WebApi Token+ 数字签名认证源码

    在本文中,我们将深入探讨这个主题,重点介绍C# WebAPI中使用Token和数字签名认证的关键概念和实现步骤。 首先,让我们理解什么是Token。在Web开发中,Token通常指的是JSON Web Tokens (JWT) 或者Access Tokens。...

    Go-GolangHttpAPI签名验证工具包提供对API请求的签名生成签名校验等工具类

    通过使用Go-Golang HttpAPI签名验证工具包,开发者可以轻松地为他们的API实现安全的签名机制,保护服务免受潜在的攻击。同时,理解其工作原理和使用方式,也有助于自定义更符合项目需求的安全策略。

    阿里云API 签名机制(C#) 解决SignatureDoesNotMatch错误

    阿里云API签名机制是阿里云服务与客户端进行安全通信的关键环节,主要用于验证请求的来源合法性,防止中间人攻击。在C#开发过程中,如果遇到"SignatureDoesNotMatch"错误,通常意味着签名计算不正确,这可能由多种...

    用API验证数字签名

    本话题将深入探讨如何利用API来验证数字签名,特别是针对Delphi开发环境中的`WinVerifyTrust` API函数。 首先,`WinVerifyTrust`是Windows操作系统提供的一个核心API,用于验证数字证书和签名。这个函数可以检查...

    ASP.NET webapi方式客户端提交签名数据到服务端返回JSON数据交互示例源码

    WebAPI:client客户端post提交签名数据/apiServer服务端返回json数据交互 客户端: Web/ApiClient/queryToken.aspx API服务端:Web/Api/ApiServe/queryToken.aspx 客户端(Web/ApiClient/queryToken.aspx )以post方式...

    WinCryto API 签名 验证

    另外,为了防止中间人攻击,应确保签名和验证过程中使用的证书和公钥的来源可靠。 总结,WinCryto API提供了强大的加密和签名功能,使得开发者可以在Windows环境中安全地处理敏感数据。通过理解并正确使用这些API,...

    Api接口TOKEN+签名安全.zip

    在API中,客户端和服务器共享一个密钥,客户端使用这个密钥对请求内容进行哈希运算,然后将结果作为签名发送,服务器同样使用密钥验证签名的有效性。 3. **安全性考虑**: - **HTTPS**:所有API通信应通过HTTPS...

    心知天气API签名文件

    在使用心知天气API时,为了确保数据的安全性和防止未经授权的访问,通常需要进行API签名的生成与验证。API签名是一个用于验证请求来源合法性的过程,它是通过一种特定的算法将请求的参数、密钥等信息组合成一个唯一...

    API接口对接生成签名与验证签名

    ### API接口对接生成签名与验证签名 ...例如,在PHP中使用了内置函数`ksort()`和`http_build_query()`等来进行排序和拼接字符串;在iOS和Android平台上,也可以找到类似的库或者方法来完成相同的功能。

    PHP UDID自动签名工具源码开源_支持任何api签名_不掉证书_程序对接内测侠

    PHP开发的UDID全自动签名工具源码 支持任何api签名 不掉证书 支持重签 程序对接内测侠 内附安装说明 源码全开源无加密无授权 修复已知BUG 增加定制页面查看软件详细 增加签名权限 优化定制页面 完善应用信息后台...

    【ASP.NET编程知识】如何使用签名保证ASP.NET MVC OR WEBAPI的接口安全.docx

    总的来说,使用签名来保护ASP.NET MVC或WebAPI接口涉及以下几个关键步骤:选择合适的签名算法,确定签名参数,实现签名生成和验证逻辑,以及在客户端和服务器之间一致地应用这些规则。通过这样的方式,可以有效地...

    WebApi+Token+数字签名.zip

    3. **数字签名**:在WebAPI中,数字签名通常用于确保数据在传输过程中的安全。首先,服务器使用私钥对数据(如Token)进行签名,然后将签名和原始数据一起发送给客户端。客户端接收到数据后,使用服务器的公钥验证...

    Delphi使用CryptoAPI生成证书及PHP(openssl)端签名验签

    总的来说,这个过程展示了如何在不同的开发环境中使用加密技术实现安全的数据传输。通过Delphi的CryptoAPI生成证书和PHP的openssl库进行签名验签,可以有效地保护数据安全,防止中间人攻击。了解并熟练掌握这些技术...

    VC6实例cryptoapi加密数字签名

    • 基本加密函数:用于选择CSP、建立CSP连接、...• 简单消息函数:用于消息处理,比如消息编码/解码、消息加/解密、数字签名及签名验证等操作。它是把多个底层消息函数包装在一起以完成某个特定任务,方便用户的使用。

    JAVA_API1.6文档(中文)

    java.sql 提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。 java.text 提供以与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 java.text.spi java.text ...

Global site tag (gtag.js) - Google Analytics