> 文章列表 > 开放API网关的实践

开放API网关的实践

开放API网关的实践

随着业务发展,系统索要对接的第三方会越来越多,那么如何让第三方快速安全的接入,就会成为各业务系统面临的问题。设计一个具备鉴权、限流、熔断等功能的API网关就显得至关重要,本文的文章目录如下。

文章目录

  • API网关作用
  • 总体设计
      • 1.基础网关的设计
      • 2.服务第三方的开放API网关设计
    • 公共请求参数
    • 公共返回参数
    • 签名方案
    • 数据库方案

API网关作用

在之前的文章中提到,API网关的作用,它相当于在业务系统中充当了一个屏障,或者说是门面的作用。对于系统的安全性等都非常重要。

总体设计

鉴权、验签等功能是通过责任链的方式进行处理,网关会根据配置进行路由,具体处理流程为:
开放API网关的实践

1.基础网关的设计

网关会根据配置中的路由规则将请求进行转发。如将 /order/* 的请求转发给内部的订单系统/user/* 的请求转发给内部的用户系统, 这种做法常用于对整个业务系统负责的基础网关.

2.服务第三方的开放API网关设计

该种网关会讲请求资源作为参数当道请求体中。主要出于以下原因:

  1. 开放API服务于第三方, 屏蔽内部路径, 有利于提供命名统一且规范的接口.
  2. 请求接口的映射由网关的路由表维护, 内部接口升级甚至切换到新服务对外接口不变.
  3. 能够更细粒度地针对接口进行权限控制、限流、统计等.

公共请求参数

开放API网关的实践

● app_id: 应用ID, 应用ID是授权的主体, 是调用方的身份标识
● method: 请求方法, 与内部URL对应, 由网关的路由表维护.
● timestamp和nonce用来防重放攻击.
● biz_content: 业务参数, 这个参数将转发给内部业务系统.

公共返回参数

开放API网关的实践
● biz_content: 返回业务参数, 网关转发业务系统的返回值.

签名方案

调用方和服务方均生成2048位RSA秘钥, 交换公钥. 私钥用于签名, 公钥用于验签, 开放API网关对外接口使用https, 故暂不需额外做加密处理.

签名算法
开放API网关的实践

数据库方案

数据库存储秘钥权限等相关的配置,E-R图如下:
开放API网关的实践

● app: 调用方主体, 用于标识请求方身份.
● group: 组, app分组, 可通过group统一进行授权.
● subject: 主体(app/group).
● resource: 资源, 维护请求资源与内部接口的映射关系, url+http_method 对应唯一的resource_id.

开放API相关的系列文章可以参考掘金文章:
开放API网关实践(一) ——设计一个API网关
开放API网关实践(二) —— 重放攻击及防御
开放API网关实践(三) —— 限流

服务器知识