对外开放的接口验证方式

article/2025/11/9 14:47:50

接口安全问题

  • 请求身份是否合法?
  • 请求参数是否被篡改?
  • 请求是否唯一?

 

AccessKey&SecretKey (开放平台)

请求身份

为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(用于接口加密,确保不易被穷举,生成算法不易被猜测)。

防止篡改

参数签名

  1. 按照请求参数名的字母升序排列非空请求参数(包含AccessKey),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA;
  2. 在stringA最后拼接上Secretkey得到字符串stringSignTemp;
  3. 对stringSignTemp进行MD5运算,并将得到的字符串所有字符转换为大写,得到sign值。

请求携带参数AccessKeySign,只有拥有合法的身份AccessKey和正确的签名Sign才能放行。这样就解决了身份验证和参数篡改问题,即使请求参数被劫持,由于获取不到SecretKey(仅作本地加密使用,不参与网络传输),无法伪造合法的请求。

重放攻击

虽然解决了请求参数被篡改的隐患,但是还存在着重复使用请求参数伪造二次请求的隐患。

 

timestamp+nonce方案

nonce指唯一的随机字符串,用来标识每个被签名的请求。通过为每个请求提供一个唯一的标识符,服务器能够防止请求被多次使用(记录所有用过的nonce以阻止它们被二次使用)。

然而,对服务器来说永久存储所有接收到的nonce的代价是非常大的。可以使用timestamp来优化nonce的存储

假设允许客户端和服务端最多能存在15分钟的时间差,同时追踪记录在服务端的nonce集合。当有新的请求进入时,首先检查携带的timestamp是否在15分钟内,如超出时间范围,则拒绝,然后查询携带的nonce,如存在已有集合,则拒绝。否则,记录该nonce,并删除集合内时间戳大于15分钟的nonce(可以使用redis的expire,新增nonce的同时设置它的超时失效时间为15分钟)。

 

实现

请求接口:http://api.test.com/test?name=hello&home=world&work=java

  • 客户端

    1. 生成当前时间戳timestamp=now和唯一随机字符串nonce=random
    2. 按照请求参数名的字母升序排列非空请求参数(包含AccessKey)
      stringA="AccessKey=access&home=world&name=hello&work=java&timestamp=now&nonce=random";
    3. 拼接密钥SecretKey
      stringSignTemp="AccessKey=access&home=world&name=hello&work=java&timestamp=now&nonce=random&SecretKey=secret";
    4. MD5并转换为大写
      sign=MD5(stringSignTemp).toUpperCase();
    5. 最终请求
      http://api.test.com/test?name=hello&home=world&work=java&timestamp=now&nonce=nonce&sign=sign;
  • 服务端
    服务端流程

Token&AppKey(APP)

在APP开放API接口的设计中,由于大多数接口涉及到用户的个人信息以及产品的敏感数据,所以要对这些接口进行身份验证,为了安全起见让用户暴露的明文密码次数越少越好,然而客户端与服务器的交互在请求之间是无状态的,也就是说,当涉及到用户状态时,每次请求都要带上身份验证信息。

Token身份验证

  1. 用户登录向服务器提供认证信息(如账号和密码),服务器验证成功后返回Token给客户端;
  2. 客户端将Token保存在本地,后续发起请求时,携带此Token
  3. 服务器检查Token的有效性,有效则放行,无效(Token错误或过期)则拒绝。

安全隐患:Token被劫持,伪造请求和篡改参数。

Token+AppKey签名验证

与上面开发平台的验证方式类似,为客户端分配AppKey(密钥,用于接口加密,不参与传输),将AppKey和所有请求参数组合成源串,根据签名算法生成签名值,发送请求时将签名值一起发送给服务器验证。这样,即使Token被劫持,对方不知道AppKey和签名算法,就无法伪造请求和篡改参数。再结合上述的重发攻击解决方案,即使请求参数被劫持也无法伪造二次重复请求。

 

实现

登陆和退出请求

登陆和退出流程

后续请求

  • 客户端
    和上述开放平台的客户端行为类似,把AccessKey改为token即可。

  • 服务端
    服务端流程

源码

请移步聚合支付平台,博主正在开发的一款开源项目,其中接口验证采用的就是上文中开放平台的验证方案,欢迎大家Star!


http://chatgpt.dhexx.cn/article/TL6ChVTe.shtml

相关文章

股票交易开放接口是什么意思?

在股票量化市场上,大家可能对股票交易开放接口的意思不太理解,其实换个角度来看,就是关于由开发团队进行开发的股票交易开放接口,那么对于接口的开发原理跟代码是怎么样的呢? 一、股票交易开放接口函数的调用&#xff…

免费开放的API接口 供学习使用

前言 在开发测试阶段,或者是在写Demo的时候,难免会用到一些测试数据,有时苦于没有可用的接口,需要自己动手去写,但是这样大大降低了效率,前期我也找了一些开放的接口,这篇文章整理一下&#xff…

api对外开放接口

一: 对外开放接口如何保正: 请求鉴别用户身份? 请求参数被篡改?请求的唯一性(不可复制) 2 为了防止别人重复使用请求参数问题,我们需要保证请求的唯一性,就是对应请求只能使用一次,这样就算…

淘宝开放平台API接口,接入方案如下

淘宝开放平台是基于淘宝各类电子商务业务的开放平台,提供外部合作伙伴参与服务淘宝用户的各类原材料,如业务API、账号体系、数据推送,奇门网关等,是淘宝电子商务基础服务的重要开放途径。即淘宝把数据开放进来,第三方软…

开放平台API接口

某宝开放平台(Taobao Open Platform)是基于各类电子商务业务的开放平台,提供外部合作伙伴参与服务用户的各类原材料,如业务API、账号体系、数据推送,奇门网关等。它是大电子商务基础服务的重要开放途径,将推…

word中怎么做思维导图,思维导图怎么画

谈及Word软件,你一定不会陌生,因为它已成为个人和企业电脑的标配软件,也是每一位电脑使用者必会的一款应用。我们时常需要使用Word处理文本相关的内容,比如文章编辑、排版和打印。 在软件中,我们可以添加文字、图片、表格和思维导图等等,但并非所有的功能都那么易用。特别…

思维导图模板怎么制作?提供几种思路

思维导图是一种非常有用的图形化思维工具。它可以帮助我们更好地组织、整理和表达头脑中的想法。在学习中,思维导图可以帮助我们更好地理解和记忆知识点。在工作中,使用思维导图可以更好地规划和管理项目。在生活中,思维导图可以帮助我们更好…

大学生活该如何度过?思维导图告诉你

转眼开学已经一个多月,很多才跨入大学门槛的新生,打算怎么度过这段精彩的大学生活呢?是打算和室友在寝室开黑厮杀于召唤师峡谷;还是谈一场轰轰烈烈的恋爱;再或者是沉浸在阅览室默默提升自己…不管你作何选择,在面对迷茫的未来的四年生活时,做好一个统筹安排是很重要的,…

亿图思维导图软件MindMaster Mac版常用快捷键汇总

亿图思维导图软件MindMaster Mac版是亿图软件最新推出的一款免费跨平台、多功能的思维导图软件。那么该软件有哪些常用的快捷键呢?小编为大家总结整理了MindMaster实用快捷键汇总,来学习一下吧! 键盘快捷键 可以在帮助选项卡上找到键盘快捷键…

SimpleMind Pro 1.29.1 小巧的思维导图工具

Mac毒搜集到的SimpleMind是macOS上一款思维导图工具,这款工具非常小巧,完全可以取代笨重的MindManager,对Mac开发者来说称得上是一大福音了。 应用介绍 SimpleMind是macOS上一款思维导图工具。思维导图可帮助您整理想法、记忆事物并形成新的…

计算机网络——网络层——思维导图

———————— 思维导图下载地址 ———————— 网络层的功能 1.1. 异构网络互联 1.1.1. 将两个以上的计算机网络,通过一定的方法,用一种或多种通信处理设备(即中间设备)相互联接起来,以构成更大的网络系统。…

计算机网络思维导图(零基础--思维导图详细版本及知识点)

第一章 计算机网络概述 1、计算机网络向用户提供的最重要的功能分别是(连通性)和(共享)。 2、网络由若干(结点)和链接这些(结点)的(链路)组成。 3、网络把许…

网络通信的思维导图

网络通信的思维导图 传输路径:PC->交换机->路由器->路由器->交换机->PC 交换机:根据目标MAC做转发,没有MAC的则转发所有端口。 路由器:根据目标IP做转发,自己没有就发给上层路由器。

MindManager2021最新版本win/mac思维导图工具 新增功能

这一期,小编为大家推荐一款非常良心的思维导图工具-MindManager2021,它非常的强大和高效,可以将你的想法随时随地以图形化的方式快速地展现在你的面前。它已经广泛应用于各行各业,渗透性非常的强,相信它可以给你的职业…

linux软件包管理思维导图,推荐五款管理工具(思维导图)

一.幕布: 幕布 幕布(mubu.com)是坤豆科技旗下第一款产品,是一款头脑管理工具,用更高效的方式和清晰的结构来记录笔记、管理任务、制定工作计划、头脑风暴。 官网:https://mubu.com/ 1.使用平台 使用平台 2.推荐理由 (1)文本和思维导图无缝切换 (2).高效管理个人生活…

横向对比22款思维导图工具,最好用的我觉得是这款!

思维导图是什么就不用说明了吧?总之今天就来谈谈这东西 且不说思维导图对记忆有没有帮助,但在整理思路这件事上,绝对是有帮助的! 阿虚平常无论是想选题,列清单,列计划什么的,都经常有用到 那…

大学计算机课思维导图,快速记忆和理解大学计算机思维导图

1946年2月14日,世界上第一台计算机诞生于美国宾夕法尼亚大学,随后计算机技术在短短几十年内蓬勃发展。起初计算机是为了运用于军事上,然后随着科技的进步,计算机即电脑,应用到每个人的身边。不难发现,计算机…

思维导图配色指南

色彩,在思维导图上是一种锦上添花的元素,除了让画面看起来更加赏心悦目,它也是反映思维发散性和层次性的重要指示。今天就教大家如何用漂亮的色彩搭配来装点自己的思维导图。 //色彩的基础知识// 关键词:色相,饱和度&…

Xmind Pro 22.11 for Mac中文版强大的思维导图软件功能介绍

XMind for Mac 是由XMind 团队重新打造的一款思维导图软件,全新 Snowbrush 引擎,提升了思维导图的展示效果,丰富了绘图的元素,包括最时尚的主题和字体设计,备注支持 Markdown 编辑模式,设计思维导图时界面更…

如何下载网页上网站上的视频

某网站视频下载方法: 一:使用浏览器插件 1:QQ浏览器或者火狐浏览器可以下载一款插件 Video DownloadHelper 在各自浏览器的配套应用中心都可以下载到 2:登陆到视频网页后该插件会自动检测到视频,此时点击下载即可 二…