SpringCloud微服务 之API网关设计(二)
1.什么是API网关?
API网关是一个轻量的java http 接口组件,可无缝将普通的 Serive 方法转换成 http 接口。并从已下几点来达到提高开发效率与接口质量的目的。
- 去掉mvc控制器,将http请求直接无缝接入JAVA服务接口
- 统一出入参格式
- 统一异常规范
- 自动检测服务接口规范
2.API网关 与普通Http接口实现流程对比
2.1 普通Http 接口实现
2.2 API网关接口实现
3.网关实现流程与技术
请求参数说明:
名称 | 类型 | 描述 |
method | string | 方法名称 |
params | json | 业务参数 |
timestamp | long | 请求时间戳 |
实现技术:
- java servlet
- spring Ioc
- Json 转换工具的使用
4.接口安全的业务需求
4.1 接口安全级别分组
- 白名单组(首页等)
- 黑名单组(购物车,订单等)
- 黑白名单组(可以有userid也可以没有userid但是显示效果不一致)
4.2 基于Token安全机制认证需求
- 登陆鉴权
- 防止业务参数串改
- 保护用户敏感信息
- 防签名伪造
4.3 Token 认证机制整体架构
整体架构分为Token生成与认证两部分:
- Token生成指在登陆成功之后生成 Token 和密钥,并其与用户隐私信息、客户端信息一起存储至Token表,同时返回Token 与Secret 至客户端。
- Token认证指客户端请求黑名单接口时,认证中心基于Token生成签名
4.3.1 Token表结构说明:
名称 | 类别 | 说明 | 约束 |
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) | 设备用户标识 |
4.3.2 业务请求具体参数:
名称 | 类型 | 描述 |
method | string | 方法名称 |
params | json | 业务参数 |
token | string | token值 |
sign | string | 签名规则:md5(secret+method+params+token+timestamp+secret) |
timestamp | long | 请求时间搓,允许与服务端10分钟误差 |
签名规则:
- 已指定顺序拼接字符串 secret+method+params+token+timestamp+secret
- 使用MD5进行加密,在转化成大写
签名的目的:
- 防串改
- 防伪造
- 防重复使用签名
服务端签名验证的具体流程:
还没有评论,来说两句吧...