点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

作者:低调的码农

juejin.im/post/6844903877985173511

场景

我们做的产品是 To B 的,那么我们自身会有一个云运营平台的系统,这个系统包含我们所有项目的运营管理数据,在一个月前,我们还不需要想对外提供服务,但是有一天我们数据被其他团队所需要了,需求就来了?

需求:我们要做一个接口认证,用来识别对方服务是啥?

小 A 同学领到任务开始是很开心的,立马做了好几个方案给领导审阅。

方案大爆炸

一、直接在 header 头部或者 url 地址给一个私有 token

约定client的token值为12345678,
那么请求的url地址为:
/remote/getApk?token=12345678服务端接收到token后,进行匹配判断是否合法token,不合法就退出,合法就是后续操作。

简单,非常简单,调用方直接拿到这个 token 写入 header 头部或者 url,在服务端拿到后进行简单匹配逻辑来确定调用方是否正确,就完事了,从明面上来讲,这个已经满足需求了,但是新的问题来了?

如果我这个 token 被第三方截取怎么办?

答:上 https,安全

没毛病的,https 是安全,因为在 http 协议的基础上增加一层 SSL/TLS(可以理解为 http 是裸奔,SSL/TLS 是盔甲,遮盖住重要的信息),但是在我们这小门小户要实现全部 https 不太可能,而且 https 对于客户端的调用也不是那么方便,那么接下来又怎么办呢?

二、加上 ip 白名单

其实这里根本不需要加参数,服务端默认就可以获取客户端的 ip,这就保证一点,如果我们 token 被劫持,就算给你发,也没啥用,没错,在很多内部系统中,我们设计接口校验就算基于它来做的,因为这个更简单,基本两边接口完全不需要改东西,写完就可以调,就一个 ip 白名单配置。

那有没有可能这个包被别人劫持,然后进行 ip 代理,然后来请求呢?

三、token 作为加密盐值,cs 作为双方加密认证

前提:

  1. 需要 ip 白名单

  2. 需要为这个调用方产出一个 token(salt)

这里约定就不是token了,使用一个双方约定的密码盐值salt=123456  GET /remote/getApk?md5=043c00e6c7ff021e8cc4d394d3264cb5&sign=md5(043c00e6c7ff021e8cc4d394d3264cb5+123456)

sign 计算方式:将我们请求的参数按key的正序排序,把里面的值进行字符串连接并且加上salt,再进行一个md5计算,当然可以选择其他hash算法,例如sha1等

这种方案在服务端,我们一样实现这一算法,并且最终校验这个 sign 值是否一样,当然这个方案并不能解决我们刚刚一开始说不安全的问题,因为网络截取是个很平常的事情。

那么有没有办法截取了用不了呢?

答案是肯定的,那我们在 url 地址添加一个请求的时间戳

GET /remote/getApk?t=1561969549&md5=043c00e6c7ff021e8cc4d394d3264cb5&sign=md5(043c00e6c7ff021e8cc4d394d3264cb5+1561969549+123456)

sign 计算方式:将我们请求的参数按key的正序排序,把里面的值进行字符串连接并且加上salt,再进行一个md5计算,当然可以选择其他hash算法,例如sha1等

这里是加一个时间戳作为 sign 的参数,那么可以理解为这个 sign 值是在特定时间内有效,在服务端接收到请求后,可以优先判断时间戳与服务端时间偏移,如果在一分钟之内,那么这个都是可以请求,超过说明这个已经过期了

如果我们对于接口请求严格限制,那么我们每次请求过的 sign 值不能重复,这个涉及到另外话题:

可以简单说一下:我们可以将每个时间戳建立一个桶,每个桶里面装的就是这些 sign 值,这些时间戳的过期时间与服务端判断的过期时间一致(如果 t 字段过期,那么就走不到这一步),就是这么简单哈。

看到这里有同学肯定会问:时间戳不一样咋办,客户端与服务端时间戳肯定会不一样的?

能想到这的同学,真的非常聪明,因为是真的有这个问题出现,当然不是这个场景,只要是时间区间判断的问题,都要考虑双方时间戳的问题

  1. 公司统一使用时间服务器,调用双方同步这个服务器时间。

  2. 客户端不定时同步服务端的时间

总结

其实这个方案设计是仅限于我们企业内部服务相互调用的一个接口设计,刚开始接到任务都会想 jwt oauth2.0 等方案,后来仔细想想,我们压根不需要那么复杂的逻辑来做,因为我们面向的是服务,不是面向独立个体的用户,当然用 jwt 和 oauth2.0 也可以,就是我们接口的请求调用就变成登录、校验、鉴权 等方式了。

谢谢各位同学查阅

热门内容:
  • 原来 Elasticsearch 还可以这么理解

  • 干掉Navicat:正版,MySQL官方客户端真香!

  • 并发测试神器,模拟一次超过 5 万的并发用户

  • 使用IntelliJ IDEA查看类图,内容极度舒适

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)

企业服务内部接口校验方案相关推荐

  1. 微服务下权限校验方案

    微服务权限校验方案 权限概述 鉴权和权限控制 权限问题描述 权限概述 任何一个系统都绕不开权限这两个字,一个良好的权限设计对一个系统起到了非常重要的作用,其实权限设计是个范围很大的问题,包括从数据库的 ...

  2. 业务中台管理系统、业务中台架构、接口类服务、模型类服务、界面类服务、组件类服务、服务架构、中后台、服务审核、AI服务、位置服务、行业场景服务、企业中台、接口配置、模型配置、数据处理、结构化数据、数据源

    业务中台管理系统.业务中台架构.接口类服务.模型类服务.界面类服务.组件类服务.服务架构.中后台.服务审核.AI服务.位置服务.行业场景服务.企业中台.接口配置.模型配置.数据处理.结构化数据.数据源 ...

  3. 企业服务架构演进-走上造轮子之路

    本篇是企业服务架构演进系列的第六篇,本篇我打算从另外一个角度去说一下企业服务架构演进的过程中我个人的一些积累.我从正式工作的第二年开始有造轮子的想法,然后从最简单最基础的方式去做,慢慢的可以做一些复杂 ...

  4. 566页19万字区级一网通办政务服务应用平台建设项目方案书

    第一章 项目简介 1 1.1 项目名称 1 1.2 项目单位及负责人 1 1.3 项目建设编写单位 1 1.4 建设目标.主要建设内容 1 1.4.1 项目建设目标 1 1.4.2 项目建设内容 3 ...

  5. 华为企业园区网络建设技术方案建议书

    项目概述  根据实际情况增加项目介绍 项目背景  项目目标  园区总体系统规划设计  需求分析  随着企业信息化建设不断深入,企业的生产业务系统.经营管理系统.办公自动化系统均得到大力发展,对于企业园 ...

  6. 畅捷通T+和旺店通·企业奇门单据接口对接

    数据源平台:旺店通·企业奇门 慧策最先以旺店通ERP切入商家核心管理痛点--订单管理,之后围绕电商经营管理中的核心管理诉求,先后布局流量获取.会员管理.仓库管理等其他重要经营模块.慧策的产品线从旺店通 ...

  7. 网易云信:通信与视频云服务发展迅猛,或成企业服务中“火箭轨道”

    网易云信,作为孵化自网易集团核心技术架构的通信与视频云服务商,目前服务范围从IM 服务逐步覆盖到视频服务.直播点播以及实时音视频技术等服务.截止2019年3月,云信在三年半时间内以营收年均增长超过20 ...

  8. 基于ESB的企业服务集成平台建设之道

    转载本文请注明出处:微信公众号EAWorld 行者:在关乎企业生存的必选项"数字化转型"以及国家信创战略的共同冲击下,企业需要改变现有业务和IT的架构,更快速地应对挑战.响应变化, ...

  9. 用友U8和旺店通·企业奇门单据接口对接

    对接系统旺店通·企业奇门 旺店通是北京掌上先机网络科技有限公司旗下品牌,国内的零售云服务提供商,基于云计算SaaS服务模式,以体系化解决方案,助力零售企业数字化智能化管理升级.为零售电商企业的订单管理 ...

最新文章

  1. h5 数字变化_前端/h5 D3.js实现根据数据动态更新图形/类似进度实时变化效果
  2. opencv 显示图片
  3. MyEclipse 9.0 正式版公布新闻 下载
  4. 牛客练习赛25 因数个数和
  5. 用户用户组及权限管理
  6. 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)
  7. 市值突破3000亿,Fortinet发布2021Q2财报
  8. es6 string includes_蔚来初体验,蔚来ES6用车日记!开着挺轻松的
  9. pandas 之dataFrame 数据显示不完全的解决方案
  10. tinygrad ->要求python3.8以上
  11. ngrok小米球实现访问本地项目
  12. 西门子/软件/博途/TIA PORTAL V14 SP1
  13. 程序员不得不了解的硬核知识大全
  14. 手动验证 TLS 证书
  15. 简单工厂、工厂方法、抽象工厂
  16. fuse的安装与使用
  17. 【最新计算机、电子毕业设计 本科 大专 设计+源码】
  18. IPO\IPOH快速开关机相关
  19. 给android手机划代
  20. long与int转换线上问题解决(必看)

热门文章

  1. 从一个数组中寻找出现奇数次的数字
  2. 关于Linux服务器磁盘空间占满问题的解决方法
  3. Sql Server函数全解(四)日期和时间函数
  4. shiro实战系列(一)之入门实战
  5. Python之Mysql及SQLAlchemy操作总结
  6. Java学习笔记七——数组工具类Arrays
  7. Java Socket发送与接收HTTP消息简单实现
  8. 从网络上获取一张图片简单的
  9. sql server 2014预览版发布
  10. 【转】Word2007中不连续页码设置 多种页码设置