开放 API 接口签名验证

JAVA接口签名sign生成工具类  签名规则 1、线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret   2、加入timestamp(时间戳),10分钟内数据有效   3、加入流水号nonce(防止重复提交),至少为10位。   4、加入signature,所有数据的签名信息。 1.pom <!--DigestUtils依赖--> <dependency> <groupId>c... 阅读详情

1. 接口安全问题

请求身份是否合法?
请求参数是否被篡改?
请求是否唯一
AccessKey&SecretKey (开放平台)

请求身份

  • 为开发者分配AccessKey(开发者标识,确保唯一)和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身份验证
用户登录向服务器提供认证信息(如账号和密码),服务器验证成功后返回Token给客户端;

客户端将Token保存在本地,后续发起请求时,携带此Token;

服务器检查Token的有效性,有效则放行,无效(Token错误或过期)则拒绝。

安全隐患:Token被劫持,伪造请求和篡改参数。《设计一个安全的对外接口》这篇也推荐阅读一下。

Token+AppKey签名验证
与上面开发平台的验证方式类似,为客户端分配AppKey(密钥,用于接口加密,不参与传输),将AppKey和所有请求参数组合成源串,根据签名算法生成签名值,发送请求时将签名值一起发送给服务器验证。

这样,即使Token被劫持,对方不知道AppKey和签名算法,就无法伪造请求和篡改参数。再结合上述的重发攻击解决方案,即使请求参数被劫持也无法伪造二次重复请求。

在这里插入图片描述
后续请求
客户端
和上述开放平台的客户端行为类似,把AccessKey改为token即可。

服务端
在这里插入图片描述

API接口设计方案 4.增强型客户端-服务器模式:增强型客户端-服务器模式是指API接口由一个客户端应用程序和一个增强型服务器应用程序提供,客户端应用程序通过调用增强型服务器应用程序的API接口来实现与应用程序的交互。2.客户端-服务器模式:客户端-服务器模式是指API接口由一个客户端应用程序和一个服务器应用程序提供,客户端应用程序通过调用服务器应用程序的API接口来实现与应用程序的交互。1.中心化模式:中心化模式是指API接口由一个中心化的组件提供,其他组件通过调用中心化组件的API接口来实现与应用程序的交互。 阅读详情

相关推荐

【人工智能 Open AI】通用 API 开放平台的系统架构设计

API 开放平台的系统设计,包括以下内容:目的:API 开放平台的主要目的是什么?功能:API 开放平台有哪些功能?架构:API 开放平台的架构如何?安全:API 开放平台的安全级别如何?接口:API 开放平台支持哪些接口?版本:API 开放平台支持哪些版本?兼容性:API 开放平台是否兼容各种系统?测试:API 开放平台的测试方法是什么?监控:API 开放平台的监控功能如何?封装:API 开放平台支持哪些封装技术?开发者身份注册与数据权限范围授权。

AI天才研究院 2万+

最易于使用的java接口签名实现

最易于使用的java对外接口签名实现

weixin_38387358的博客 4625

用FPGA在HDMI上显示自定义字符:从COE文件到OSD叠加的保姆级教程

本文详细介绍了如何在FPGA上实现HDMI视频流的OSD字符叠加技术,从COE文件生成到动态区域控制的完整流程。通过Verilog代码示例和实战技巧,帮助开发者掌握字符ROM设计、像素坐标追踪和动态混合等核心技术,适用于视频监控、系统状态显示等应用场景。

weixin_28720767的博客 231

java API接口签名授权安全认证问题—基于HMAC的rest api鉴权处理

创建一个拦截器 public class AkSkAuthInterceptor implements ClientHttpRequestInterceptor { private static final String HEADER_X_CONTENT_MD5 = "X-Content-MD5"; private static final String HEADER_X_VERSION = "X-Sign-Version"; private static final Stri

songkai558919的博客 2973

四、嘉立创EDA原理图绘制实战:从零搭建STM32温湿度监测系统

本文详细介绍了使用嘉立创EDA标准版从零开始绘制STM32温湿度监测系统原理图的完整流程。涵盖核心元器件选型、电源电路设计、ADC按键创新应用及模块化布局技巧,帮助电子爱好者快速掌握STM32系统设计,提升嵌入式开发实战能力。

h0i1j2k3l的博客 884

海康机器人ID5000 系列智能读码器(三)

又過了兩個月,漸漸的對這個攝像頭的功能更加熟悉了,而實際上,我要做的功能也越來越複雜,從一開始的讀碼,到後來的通過讀二維碼控制設備,再到未讀到二維碼控制設備等,下面就對具體的細項做一個總結。了解完這些就能對ID5000這個設備,乃至很多海康的設備都能做一個二次開發。

qq_54359036的博客 3075

开放平台api接口签名验证说明

前言: 在写开放到外部的API接口时是如何保证数据的安全性的? 在外部用户访问开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, 会遇到以下问题: 请求身份是否合法 请求参数是否被篡改 请求的唯一性 为了保证数据在通信时的安全性,我们可以采用参数签名的方式来进行相关验证。 一、示例: 如:客户端client需要调用平台开放api接口进行数据查询 流程其...

常年被追砍的博客 1705

国产平替NeuroSky?实测金牛座TGAM脑电模块,从Arduino到Python的完整数据采集指南

本文详细介绍了国产金牛座TGAM脑电模块的完整使用流程,包括硬件连接、数据采集和Python分析。通过Arduino和Python的实战案例,展示了如何从脑电波传感器获取并解析专注度、放松度等数据,适用于专注力训练和脑机接口开发。

weixin_30735745的博客 577

实现开放API接口签名验证

1、新建Certificate类 package com.wise.medical.common.utils; import org.apache.commons.codec.digest.DigestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.nio.

Yun_Coding的博客 2148

CORS(跨域资源共享)漏洞解决方法

最近,测试环境上的项目被360测试人员检测出来有一个CORS漏洞,以下记录下漏洞问题与解决方法。 一、低危漏洞:CORS漏洞问题 测试人员访问某个url,将请求头中的Origin字段修改为任意值,结果仍然能获得正确的响应报文,就说明有CORS漏洞。 当CORS的设置不正确时,就会带来安全问题;当响应头中的Access-Control-Allow-Origin设置为null或*时,表示信任任何域,这时候就可能引入安全问题。 修复方法是合理配置CORS,判断Origin是否合法;具体说就是不让在nginx或t

BHSZZY的博客 3万+

采样率转化代码C++(有理倍数,升采样、降采样均可)

【代码】采样率转化(有理倍数,升采样、降采样均可)

goudahai的专栏 547

SPAD IMX479规格_分辨率

当然IMX479具备IMX459几乎全部的数字架构,但也有一个缺点就是贵,这个让头部的主机厂有些犹豫,毕竟大家都在集中火力想把车载LiDAR玩进千元机。如果用一片IMX479是不太可能实现千元内部的,当然国产也在奋起直追,特别在前面的几家SPAD厂商都具备开发IMX479的实力,但相对来说落地可能更是当下所考虑的,IMX479的迭代是基于IMX459,小编已经注意到国内有一两家已经在挑战479的规格了,如果国产SPAD没有大规模量产就直接流片IMX479的规格,可能就有点忽略市场的反馈闭环。

致力于lidar应用开发 2419

java token生成和验证_开放API接口签名验证,让你的接口从此不再裸奔

接口安全问题请求身份是否合法?请求参数是否被篡改?请求是否唯一?AccessKey&SecretKey (开放平台)请求身份为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(用于接口加密,确保不易被穷举,生成算法不易被猜测)。防止篡改参数签名按照请求参数名的字母升序排列非空请求参数(包含AccessKey),使用URL键值对的格式(即key1=value1&amp...

weixin_39800990的博客 1300

利用AWVS进行反制

awvs 10.5下载 http://www.32r.com/soft/12986.html

渗透之路,攻防之间皆学问 6654

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

开放API接口签名验证

https://www.jianshu.com/p/ad410836587a

zhizhuodewo6的博客 369

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

开放api接口签名验证规则

为了保证数据在通信时的安全性,我们可以采用参数签名的方式来进行相关验证。 案列分析 我们通过给某 [移动端(app)] 写 [后台接口(api)] 的案例进行分析: 客户端: 以下简称app 后台接口:以下简称api 我们通过app查询产品列表这个操作来进行分析: app中点击查询按钮==》调用api进行查询==》返回查询结果==>显示在app中 上代码啦 -_-! 一、不进行验证的方式 a...

java的涟漪 2160

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

开放API接口签名验证,让你的接口从此不再裸奔

接口安全问题 请求身份是否合法? 请求参数是否被篡改? 请求是否唯一? AccessKey&SecretKey (开放平台) 请求身份 为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(用于接口加密,确保不易被穷举,生成算法不易被猜测)。 防止篡改 参数签名 按照请求参数名的字母升序排列非空请求参数(包含AccessKey),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA; 在stringA最

Just for fun的专栏 626

基于Token实现开放API接口签名验证

基于Token实现开放API接口签名验证

Charge8的博客 1万+

开放 API 接口签名验证,让你的接口从此不再裸奔

接口安全问题 请...

一个有趣、有料、有内涵的地方! 486

拒绝接口裸奔,开放API接口签名验证

接口安全问题 请求身份是否合法? 请求参数是否被篡改? 请求是否唯一? AccessKey&SecretKey (开放平台) 请求身份 为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(用于接口加密,确保不易被穷举,生成算法不易被猜测)。 防止篡改 参数签名 按照请求参数名的字母升序排列非空请求参数(包含AccessKey),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA; 在stringA最

m0_63437643的博客 219
上一篇: 加密算法
下一篇: JSON性能的比较(Jackson,Gson,Fastjson)
yonhu123java
博客等级 码龄14年 6粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值