目前的状况

公司目前有若干的第三方API, 这些API是供第三方的一些渠道对接,让渠道可以访问到一些公司的业务信息,他们是这么设计的。

  1. 使用Bear Token 作为第三方访问API的时候的唯一验证方式, 当第三方需要访问公司的API的时候,任何请求需要在请求头里面添加 Authorization:头信息, 用来提供Token给服务器 从而验证当前的请求是否有效。
  2. 有一些操作我们想要回避第三方渠道, 如客户需要提交一些信息给服务器 第三方渠道不需要知道这些信息的时候, 我们会让访问第三方渠道的客户跳转到一个单独页面, 当然这个页面也需要有单独的token, 获取这个token的时候需要第三方渠道用带有 Authorization token的请求 去访问对应的生成token的API, 从而可以授权客户访问单独的页面和我方做交互
  3. 这些token 作为第三方渠道是完全可以看得到的,也就是说第三方渠道是可以冒充任何客户来和我们公司做交互。 但是君子协议说他们不会这么做。 这样出现的任何客户单独和我们做交互的页面的信息的丢失 第三方渠道是不需要负责任的。
  4. token并没有任何验证机制, 生成token 只是生成随机的固定长度的二进制数据, 然后转换为16进制, 然后做了一个有效时间验证保证token在6个小时内有效。没有任何的签名, 防重放攻击验证。

应该如何做签名验证

网上大概查了查 结合之前对接亚马逊 MWS接口的时候的经验,列一下一般的签名验证方法。

  1. 任何和API做对接的第三方都需要进行注册步骤, 通过注册后API会给第三方生成一个clientID 和一个SecketKey。 clientID是公开的, 用来唯一表示一个第三方渠道, 而secretKey是保密的只有第三方渠道和API知道, 用来加密计算散列值。
  2. API需要制定唯一的签名计算规则, 例如MWS使用Hmac, 使用key加密所有参数以一定固有规则排列好的 参数的散列值(包括clientID,以及时间戳, clientID可以确认是谁发的请求, 时间戳可以使得请求只在一段时间内有效, 在服务器端 可以直接判断 是否过了有效期, 被签名了的时间戳无法篡改), 带着该散列值访问服务。API来做校验,双方如果计算结果一致,则表明当前请求是持有secretKey的一方发出的。 否则就是非法的
  3. 但是如果作为中间人抓取到了请求的包, 那么中间人一直使用相同的参数(带有散列值和参数)一直发送请求虽然不能改变请求参数但是任然可以合法访问。那么这个时候就需要服务器做防重放攻击
  4. 我们可以在redis中存放一个集合, 每次有合法的请求过来的时候 我们就把这个计算出来的 散列值放入到集合中, 在请求到来的时候先看散列值是否在set中, 如果在就返回异常。
  5. 但是很明显每个请求的散列值都存入到redis中很不现实, 这时我们可以给散列值设置有效期,例如设置散列值的有效期为10分钟,只记录在10分钟内的请求的nounce是否存在。

提供给第三方的API的签名验证问题相关推荐

  1. Java 提供给第三方使用接口方法

    Java提供接口给第三方使用,校验保证接口的安全性 前言 接口Controller 接口幂等性校验 实现类ServiceImpl 第三方调用接口Api实现类 生成签名工具类 HttpCilent工具类 ...

  2. 验证微软和微软提供给第三方的数字签名

    验证微软和微软提供给第三方的签名 ,看MSDN内容好多啊!不过下面的程序对已签名的文件验证是没有问题的. // WinTrustSignature.cpp : Defines the entry po ...

  3. 30行代码消费腾讯人工智能开放平台提供的自然语言处理API

    腾讯人工智能AI开放平台上提供了很多免费的人工智能API,开发人员只需要一个QQ号就可以登录进去使用. 腾讯人工智能AI开放平台的地址:https://ai.qq.com/ 里面的好东西很多,以自然语 ...

  4. 利用ffmpeg提供的库(API)进行音频与视频的编码并生成文件

    Output example.c 目录 [隐藏] 1 概述 2 音频输出 2.1 add_audio_stream 2.2 open_audio 2.3 get_audio_frame 2.4 wri ...

  5. PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据...

    如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...

  6. 原生js提供的视频画中画api

    经常看视频的朋友可能会遇到视频"画中画"的效果,例如你在看优酷的电视剧,向下滚动看推荐视频或者评论等信息的时候,发现上面的播放视频被屏幕上滚之后遮盖了,右下方出现了一个小视频播放器 ...

  7. java调用第三方天气预报API接口

    java调用第三方天气预报API接口 package com.sensordata.controller; import com.common.json.JSONObject; import java ...

  8. 10-11月数据接口-京东商品信息api,金碟Api对接,京东商智监控商品request采集后指数还原,聚水潭第三方接入api,拼多多上架辅助非第三方SKU核对上传,拼多多销量无限修改更新

    茶壶煮饺子: 1.京东商品信息api: http://app.miiow.com.cn:8181/ajaxApi.ashx/@/dontlogin/sycm/getJDItemBaseInfo?ite ...

  9. 痞子衡嵌入式:其实i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1050/1020/1015系列ROM中的FlexSPI驱动API使用. 今天痞子衡去4S店给爱车做保养了,保养一次要等两小 ...

最新文章

  1. android webview单向认证,android 让webview支持自签名证书https 双向认证(SSL)
  2. iOS 中strong,weak,copy,assign区别
  3. Java 线程池中的线程复用是如何实现的?
  4. LiveVideoStack成立5周年生日快乐!一路走来,感谢有你!
  5. python大气校正_Sentinel-2卫星影像的大气校正方法
  6. [原+转]CSS hack 小技巧 让你的CSS 兼容ff ie6.0 ie7.0
  7. xadmin在Django 1.11中的使用及中英文切换
  8. 12123两小时没付款怎么办_交管12123支付宝小程序付款不了怎么办 交管12123支付宝缴费方法介绍[多图]...
  9. Java面试那些事--可能会问的那些问题(中高级篇)
  10. 10年建模师给想学次世代游戏建模同学的一些忠告,太受益了!
  11. linux清除所有后台程序,Linux查看和关闭后台运行程序的方法
  12. deepin系统引导_Deepin系统安装教程
  13. STM32---IAPISP介绍
  14. Chrome安装HttpWatch
  15. 【Linux】CMAQ实践部署
  16. Vue 组件封装之 Result 结果页
  17. dockerfile使用DEBIAN_FRONTEND
  18. bc伐木机器人_1+X | 工业机器人操作编程平台(HB-CZBC-C10)
  19. MySql函数 - DATE_ADD()函数
  20. notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别?

热门文章

  1. 【调剂】上海工程技术大学-材料工程学院-焊接专业-硕士调剂
  2. Lucene教程详解
  3. USB PD快充取电协议触发诱骗芯片产品系列
  4. “吕医生”宣布完成A轮千万级融资 未来3年将在成都布局200家直营社区全科诊所...
  5. Revit2014 支持编程创建管道并且立即赋予系统类型名称
  6. 沟通中经常用到的几个库存术语
  7. Ubuntu上查崩溃办法
  8. lftp安装包 linux_linux-lftp
  9. 2021-西方哲学精神探源-期末考试题答案
  10. 脑部进食 - 高斯消元