『互联网架构』软件架构-API接口安全网关《service变controller》(15)

栏目: 后端 · 发布时间: 5年前

内容简介:在网上发现了一个牛X的思路,在做restful的时候,如果业务改变,需要每次都修改controller,后来方便了,直接透传的方式,其实也比较麻烦,每次都要写controller。需求变了接口也发生了改变,长期这样的结果,就是维护成本越来越高。源码:https://github.com/limingios/netFuture/tree/master/api网关/idig8-api-gateway移动互联时代,都在追寻一个万能的解,其实这个解可能不存在。其实后端开发的挑战越来越多。里面很多个controlle

在网上发现了一个牛X的思路,在做restful的时候,如果业务改变,需要每次都修改controller,后来方便了,直接透传的方式,其实也比较麻烦,每次都要写controller。需求变了接口也发生了改变,长期这样的结果,就是维护成本越来越高。源码:https://github.com/limingios/netFuture/tree/master/api网关/idig8-api-gateway

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

背景

移动互联时代,都在追寻一个万能的解,其实这个解可能不存在。其实后端开发的挑战越来越多。里面很多个controller,如果系统越来越庞大,导致的结果维护困难。

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

什么是API网关

API网关是一个轻量的java http 接口组件,可无缝将普通的 Serive 方法转换成 http 接口。并从已下几点来达到提高开发效率与接口质量的目的。

1. 去掉mvc控制器,将http请求直接无缝接入 JAVA 服务接口

2. 统一出入参格式

3. 统一异常规范

4. 自动检测服务接口规

5. 负责路由协议的转换

  • 普通的http接口

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

  • API网关接口的实现

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

当初一个接口开发一个控制器,1000个接口开发1000个控制器。一个一个封装参数,质量也提高了统一规范,出问题统一的方式回馈。不规范的代码也会被api网关拦截掉。

代码讲解

就5个类,不到500行代码。开发的人最喜欢又小又精湛的代码,不容易软。方便理解,方便使用,又粗又大的代码,很不方便迁移,不好控制容易软。

1. ApiGatewayHandler.java

转换器和调用加载器

2. ApiGatewayServlet.java

类似springboot的一个入口类

3. APIMapping.java

注解暴露类

4. ApiRequest.java

请求封装类

5.ApiStore.java

API IOC 大仓库

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

代码的方式流程图

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

  • 请求参数说明:
名称 类型 描述
method string 方法名称
paramter json 业务参数
timestamp long 请求时间戳
  • 实现技术:
  1. java servlet
  2. spring Ioc
  3. Json 转换 工具 的使用

接口安全的业务需求

  • 接口安全级别分组
  1. 黑名单组
    >我的,账户信息
  2. 白名单组
    >商品展示,商品列表
    3.黑白名单组
    >商品详情内的展示,已登录和未登录之间的区别
  • 基于Token安全机制认证要求
  1. 登录鉴权
  2. 防止业务参数串改
    >fiddler抓包工具。可以实现。
  3. 保护用户敏感信息
    >用户Id,在网络上是不进行传输的,都是用token来代替
  4. 防签名伪造
    >客户端和服务端都有一套token和Secret的,传输的时候不是用secret传输,是的签名
  • Token 认证机制整体架构

    >整体架构分为Token生成与认证两部分:

  1. Token生成指在登陆成功之后生成 Token 和密钥,并其与用户隐私信息、客户端信息一起存储至Token表,同时返回Token 与Secret 至客户端。
  2. Token认证指客户端请求业务接口时,认证中心基于Token生成签名。

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

  • Token表结构说明:

    > 其实如果token加入索引的话,查询也比较快,但是相对于 redis 来说肯定是没有redis快的。

名称 类型 描述 约束
id number id主键 主键,自增长
memberId number 会员ID
accessToken varchar(50) Token 索引
secret varchar(50) 密钥
createdTime datetime 创建时间
expiresTime datetime 有效期至
clientIp varchar(50) 客户端IP
clientType varchar(50) 客户端类别
eCode varchar(50) 设备标识
uCode varchar(50) 设备用户标识
  • 业务请求具体参数:
名称 类型 描述
method string 方法名称
param json 业务参数
token string token值
sign string 签名规则:md5(secret+method+param+token+secret+timestamp)
timestamp long 请求时间搓,允许与服务端10分钟误差

签名规则:

1. 已指定顺序拼接字符串 secret+method+param+token+timestamp+secret

2. 使用MD5进行加密,在转化成大写

签名的目的:

1. 防串改

2. 防伪造

3. 防重复使用签名

服务端签名验证的具体流程:

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

签名认证与API网关的整体认证流程

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

PS:代码直接看源码,主要是了解思路,对于性能我建议先别考虑,先实现之后才能谈性能问题,性能问题没有绝对的只有相对的。最主要是签名的获取生成的思路。

『互联网架构』软件架构-API接口安全网关《service变controller》(15)

>>原创文章,欢迎转载。转载请注明:转载自,谢谢!>>原文链接地址:上一篇:

已是最新文章


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python高级编程(第二版)

Python高级编程(第二版)

[波兰] Michał Jaworski、[法] Tarek Ziadé / 张亮、阿信 / 人民邮电出版社 / 2017-9-19 / 89.00元

Python作为一种高级程序设计语言,凭借其简洁、易读及可扩展性日渐成为程序设计领域备受推崇的语言之一。 本书基于Python 3.5版本进行讲解,通过13章的内容,深度揭示了Python编程的高级技巧。本书从Python语言及其社区的现状开始介绍,对Python语法、命名规则、Python包的编写、部署代码、扩展程序开发、管理代码、文档编写、测试开发、代码优化、并发编程、设计模式等重要话题......一起来看看 《Python高级编程(第二版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具