概述
API网关是API 托管服务,提供 API 的完整生命周期管理,包括创建、维护、发布、运行、下线、运维监测、安全管控等阶段。通过API网关服务,可以将您的数据、业务逻辑或功能安全可靠的开放出来,以快速建设以API为核心的系统架构,为业务系统、合作伙伴提供连接。
消费者
消费者通常是网关的调用方,比如可以是客户端程序等,所以通常也可以称为应用;当消费者请求路由到网关时,网关会对消费者进行识别。网关要判断这个调用者有没有访问当前路由的权限,如果没有,网关就会拒绝当前请求,否则就会通过路由请求并对请求进行进一步的处理。识别过程我们叫做鉴权,那么鉴权之前,为确保具有路由请求的权限,以允许对应消费者访问路由,会给目标路由进行授权,也即是消费者授权或者叫做应用授权。
摘要签名认证
当前网关支持的认证鉴权方式为摘要签名认证方式。API网关提供前端签名及验签能力,前端签名及验签主要两点用途:
- 验证客户端请求的合法性,确认请求中携带授权后的AK生成的签名。
- 防止请求数据在网络传输过程中被篡改。
API的拥有者可以在网关控制台的应用管理页面生成APP,每个APP会携带一对签名密钥(APP Key和APP Secret),API拥有者将API授权给指定的APP(APP可以是API拥有者颁发或者API调用者所有)后,API调用者就可以用APP的签名密钥来调用相关的API了。
AppKey和AppSecret
客户端调用API 时,需要使用已授权签名密钥对请求内容的关键数据进行加密签名计算,并且将APP Key和加密后生成的字符串放在请求的 Header 传输给API网关,API网关会读取请求中的APP Key的头信息,并且根据APP Key的值查询到对应的APP Secret的值,使用APP Secret对收到的请求中的关键数据进行签名计算,并且使用自己的生成的签名和客户端传上来的签名进行比对,来验证签名的正确性。只有签名验证通过的请求才会发送给后端服务,否则API网关会认为该请求为非法请求,直接返回错误应答。
AppCode简单认证
扩展功能,暂未上线,作为保留字段。
AppCode简单认证就如同字面含义,旨在为用户提供一种快捷简单的认证方式去进行授权签名,无需在客户端实现复杂的签名算法,其作用等同于AppKey和AppSecret配对使用的效果。
后续将会允许用户通过header或者query参数调用AppCode,进行简单认证。
注意简单认证方式调用非常省事,免去了复杂的签名过程,但是把AppCode作为明文暴露网络中传输,会带来一些安全隐患,存在丢失AppCode的风险。
API对消费者鉴权和自定义鉴权插件之间的关系?
消费者/应用配置可以在不同资源池中可以共享,在租户/用户级别上是隔离的,也即是说用户User-1在区域Region-1创建了的应用App-A,当用户User-1切换区域到Region-B后,在应用列表可以看到App-A,并且可以对App-A进行修改、解除API的授权等操作,该操作在用户User-1下所有区域及区域下已授权的所有API中进行同步。
自定义鉴权插件,对网关来讲属于实例级别的应用范围。用户在当前实例Instance-1下添加的鉴权配置(插件配置管理),只适用于实例Instance-1中所有的API。
总体来讲,消费者适用于租户级别下的API授权管理,不受区域、资源池、实例的限制;自定义鉴权插件,通常是作用与实例级别下的API授权管理,范围更小。