首页 > 其他分享 >三方(开放)接口加签、验签方案

三方(开放)接口加签、验签方案

时间:2024-10-22 12:19:01浏览次数:3  
标签:Nonce 请求 接口 字符串 参数 签名 value1 验签 加签

一、需求背景

        在为第三方提供服务时,平台需要确保接口请求的安全性,防止恶意行为如身份伪造、请求重放和参数篡改。为此,设计一套有效的接口加签与验签流程至关重要。本方案旨在通过简洁且高效的方式实现这一目标,同时尽量减少对接的复杂度。

二、问题与解决方案

1. 防止请求伪造问题

问题描述:确保请求来自已注册的合法第三方应用,防止未授权的应用冒充合法应用发起请求。

解决方案

  • AppKey 和 AppSecret 分发:平台为每个第三方应用分配一对唯一的 AppKey 和 AppSecret。其中,AppSecret 是一个密钥,用于生成签名(Signature)。

  • 签名生成:第三方在调用接口时,使用 AppSecret 对请求参数进行签名,并将生成的 Signature 作为参数传递给平台。

  • 签名验证:平台接收到请求后,使用存储的 AppSecret 重新计算签名,并与请求中携带的 Signature 进行比对。如果两者一致,则认为请求是合法的;否则,拒绝该请求。

2. 解决请求重放问题

问题描述:防止恶意用户通过重复发送相同的请求来绕过系统限制或造成其他安全风险。

解决方案

  • Nonce 机制:为每个请求生成一个随机字符串 Nonce,作为唯一标识符。Nonce 参与签名计算,并在每次请求时都不同。

  • 时间戳校验:引入时间戳 Timestamp 参数,要求第三方在请求中包含当前的时间戳,并将其参与签名计算。平台接收请求后,检查时间戳是否在允许的时间范围内(例如,前后 x 分钟内),以确保请求的新鲜度。

  • Nonce 存储与校验:平台使用 Redis 等高性能缓存系统记录最近 x 分钟内的所有 Nonce 值。当接收到新的请求时,首先检查 Nonce 是否已经存在于缓存中。如果存在,则拒绝该请求;否则,将其添加到缓存中并继续处理。

3.签名算法与验签过程

1. 签名算法

签名算法用于生成请求的签名,确保请求的完整性和来源的合法性。以下是详细的签名计算步骤和注意事项。

计算步骤
  1. 参数排序

    • 将所有需要参与签名的 <key, value> 请求参数对按 key 进行字典升序排序,得到有序的参数对列表 N

    • 示例:假设请求参数为 { "param2": "value2", "param1": "value1", "param3": "value3" },排序后的列表 N 为 [("param1", "value1"), ("param2", "value2"), ("param3", "value3")]

  2. 拼接字符串

    • 将排序后的参数对列表 N 按 URL 键值对的格式拼接成一个字符串 T。每个键值对之间用 & 分隔,且 value 部分需要进行 URL 编码(使用大写字母)。

    • 示例:假设排序后的参数对列表 N 为 [("param1", "value1"), ("param2", "value2"), ("param3", "value3")],拼接后的字符串 T 为 param1=value1&param2=value2&param3=value3

  3. 添加应用密钥

    • 将应用密钥以 app_key 为键名,组成一个新的 URL 键值对,并将其拼接到字符串 T 的末尾,得到最终的字符串 S

    • 示例:假设应用密钥为 my_secret_key,则最终的字符串 S 为 param1=value1&param2=value2&param3=value3&app_key=my_secret_key

  4. MD5 运算

    • 对字符串 S 进行 MD5 运算,将得到的 MD5 值转换为大写形式&#x

标签:Nonce,请求,接口,字符串,参数,签名,value1,验签,加签
From: https://blog.csdn.net/qq_61829974/article/details/143145330

相关文章

  • C++文字识别接口介绍-翔云-通用文字识别API接口
    文字识别接口是一种提供给开发者使用的API服务,主要功能是通过光学字符识别(OCR,OpticalCharacterRecognition)技术将图片中的文字转换为可编辑的文本。这种技术广泛应用于各种场景,比如证件识别、票据识别、书籍扫描等。使用第三方平台如翔云文字识别接口通常需要以下几......
  • PHP发票验真 API-发票真伪查验、验证接口示例
    发票验真API是一种在线服务,它允许用户或企业通过编程接口(API)验证发票的真实性。这种服务通常由政府机构或者授权的第三方(如翔云、百度)提供,旨在打击伪造发票的行为,保护消费者的合法权益,同时也有助于税务机关加强税收管理。企业和个人可以通过发票查验API接口来验证增值税......
  • 网神SecGate 3600防火墙 app_av接口存在任意文件上传漏洞
     0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用......
  • 手机在网状态查询接口-在线手机在网状态查询-手机在网状态查询API
    接口简介:查询手机号在网状态,返回正常使用、停机、未启用/在网但不可用、不在网(销号/未启用/异常)、预销户等多种状态直连三大运营商,实时更新,可查询实时在网状态高准确率-实时更新,准确率99.99%接口地址:https://www.wapi.cn/api_detail/120/263.html在线核验:https://www.wa......
  • springboot接口Get请求实体类入参
    在springboot中,对HTTPGET请求,通常不会将请求体(body)作为主要的数据传输方式,因为GET请求通常用于请求数据,而不是发送数据到服务器(尽管从技术上讲,GET请求可以包含请求体,但这并不常见,也不符合RESTfulAPI的设计原则)。因此,对于GET请求的入参,通常不会使用@RequestBody注解。一、......
  • 分享一个大模型在请求api接口上的巧用
    前言自从Chatgpt横空出世以来,各种智能工具层出不穷,聊天、绘画、视频等各种工具帮助很多人高效的工作。作为一个开发者,目前常用应用包括代码自动填充,聊天助手等。这些是工具层面的使用,有没有将大模型和日常编码的前后端流程相结合使用的切入点呢?今天分享一个使用大模型自动调用a......
  • 金蝶云星空——关于Webapi保存接口同时自动审核
    问题期望在调用金蝶Webapi接口的新增单据的时候,同时完成提交、审核操作解决方案webapi保存接口有个参数IsAutoSubmitAndAudit,用来在保存时自动提交和审核,传入保存JSON数据时传入此参数设置为true即可实现自动提交审核。说明:为了减少接口调用,简化接口使用,但在实践中很多单......
  • 抽象类和接口
    1.为什么要有抽象类?目录1.为什么要有抽象类?对于一些类它只是对其子类的抽取,自己并不能表示一个对象,比如Animal类只是对动物行为和属性的提取,自己并不能表示一个对象,此时我们就可以用abstract关键字修饰这个类,那么这个类就只能被继承,自己不能创建出一个对象。我们把被abstra......
  • pytest+python+requests+allure接口自动化
    文件层级:接口层,用例层,公共层,报告层,conftest.py注意:1.需要被调用的类方法,使用@classmethod,这样调用时,无需实例化;      2.保持登录,使用requests.session;方式一:conftest.py:1.登录:fixture(scope=session)写登录方法;2.参数关联:定义空字典,使用fixture(scope=function),闭......
  • Linux DMA Engine framework(2)_功能介绍及解接口分析
    1.前言从我们的直观感受来说,DMA并不是一个复杂的东西,要做的事情也很单纯直白。因此Linuxkernel对它的抽象和实现,也应该简洁、易懂才是。不过现实却不甚乐观(个人感觉),Linuxkerneldmaengineframework的实现,真有点晦涩的感觉。为什么会这样呢?如果一个软件模块比较复杂、晦涩,要......