专栏首页java思维导图拒绝接口裸奔!开放API接口签名验证!

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

接口安全问题

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

AccessKey&SecretKey (开放平台)

请求身份

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

防止篡改

参数签名

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

请求携带参数AccessKey和Sign,只有拥有合法的身份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

客户端

  • 生成当前时间戳timestamp=now和唯一随机字符串nonce=random
  • 按照请求参数名的字母升序排列非空请求参数(包含AccessKey)stringA="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random";
  • 拼接密钥SecretKeystringSignTemp="AccessKey=access&home=world&name=hello&work=java×tamp=now&nonce=random&SecretKey=secret";
  • MD5并转换为大写sign=MD5(stringSignTemp).toUpperCase();
  • 最终请求http://api.test.com/test?name=hello&home=world&work=java×tamp=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即可。

服务端

服务端流程

本文分享自微信公众号 - java思维导图(java-mindmap)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    架构师修炼
  • 拒绝接口裸奔!开放API接口签名验证!

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

    好好学java
  • 【笔记】API 接口签名验证

    很多时候在开发对外接口的时候,为了保证接口的安全以及服务的稳定,要对接口的访问添加一定的限制规则。

    redszhao
  • PHP开发API接口签名生成及验证

    开发过程中,我们经常会与接口打交道,有的时候是调取别人网站的接口,有的时候是为他人提供自己网站的接口,但是在这调取的过程中都离不开签名验证。

    OwenZhang
  • API接口签名验证,你学废了吗

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

    Java技术精选
  • 一种基于签名算法且简单安全的API授权机制

    笔者以前在做广告系统时发现对接的大多数平台的广告系统都是以token方式授权接口,而且这个token是一直不变的,由广告主提供,可以说这就是裸奔的接口,只不过这...

    Java艺术
  • 阿里大师带你详解API接口安全

    接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看:

    Java_老男孩
  • python即时查询API接口 数据签名验证

    前面我们提供了php和.net调用快递鸟API接口的示例,部分网友也使用python开发,因此我封装了相关代码,让大家少踩坑。

    老杨占线
  • PHP开发API接口签名生成及验证操作示例

    本文实例讲述了PHP开发API接口签名生成及验证操作。分享给大家供大家参考,具体如下:

    砸漏
  • 移动端接口安全那些事

    服务端提供对外开放到公网API接口,危险非常大.尤其对移动应用开放接口的时候,更需要关注接口安全性的问题,要确保应用APP与API之间的安全通信,防止数据被恶意...

    php007
  • App开放接口api安全:Token签名sign的设计与实现

    在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些 接口需要进行身份的认证,那么这就需要...

    肉眼品世界
  • 微服务的用户认证与授权杂谈(上)

    几乎绝大部分的应用都需要实现认证与授权,例如用户使用账户密码登录就是一个认证过程,认证登录成功后系统才会允许用户访问其账户下的相关资源,这就是所谓的授权。而复杂...

    端碗吹水
  • REST API 安全设计指南

    REST API 安全设计指南。REST的全称是REpresentational State Transfer,它利用传统Web特点,提出提出一个既适于客户端应...

    BestSDK
  • REST API安全设计指南

    REST API 安全设计指南。REST 全称是 Representational State Transfer,它利用传统 Web 特点,提出一个既适于客户端...

    常见_youmen
  • RESTFUL API 安全设计指南

    REST的全称是REpresentational State Transfer,表示表述性无状态传输,无需session,所以每次请求都得带上身份认...

    lyb-geek
  • 百度:人脸登录集成

    为人脸登录提供人脸注册集合,基于人脸进行无动作活体检测、及后台在线活体检测算法,判断用户为真人,保障业务环节中的用户真实性判断。

    WindWant
  • 扒光ERP的真理内裤,让节操碎的一塌糊涂

    今天饼哥来八一八上周ERP行业出了那些糗事。果真应了不在沉默中死亡,就是在沉默中等待死亡,ERP行业2014年还没迎来喜大普奔的日子,就被一帮“互联网观察家”彻...

    人称T客
  • 干货 | Elasticsearch 7.1免费安全功能全景认知

    结合大家最关心的问题,从下面几个认知维度,对Elasticsearch安全进行全面探讨。

    铭毅天下
  • H5与小程序技术方案比较

    薛定喵君

扫码关注云+社区

领取腾讯云代金券