业务网关之AK中心建设
啥是AK
AK(Access Key)是一种身份证明,它解决了“资源的使用者是谁”这个问题,比如在生活中,身份证可以证明你是你,而在云计算或程序中,AK能证明你是这个应用的拥有者。
AK和密码的有啥区别呢,密码面对的主体是人,人可以使用密码登录系统证明身份;AK的主体是程序或服务,程序或服务可以使用AK作为身份证明调用开放接口。
AK分类
AK分类主要和密码学的加密方式相关,常见的有两类:
- 对称AK(包括AKId、AKSecret)。AKId、AKSecret是成对出现的,由AK中心提供给用户,采用基于共享密钥的认证方式。每次调用相关接口时,用户会采用保存的AKSecret针对某些参数做签名,开放网关接收到请求后会用AKId查找存储的AKSecret做签名,验签通过后在通过认证。
- 非对称AK(AKId、AKPrivateKey和AKPublicKey),其中AKPrivateKey和AKPublicKey是一对公私钥,用户需将AKId、AKPublicKey上传给AK中心,在调用接口时用私钥做签名,开放网关收到请求后调用AK中心的服务,用公钥验签,通过后则认证通过。
AK中心 AK中心不是孤立存在的,在整个开放网关体系下AK中心是流量必经之地,因此它的重要性不言而喻。
网关AK中心建设的意义在于满足更多租户、服务的定制化需求,如服务权限管控、调用方管理等,更是为了统一当前 开放体系中“散落在各个系统的各自定制的开放认证机制”,此后所有的服务开放认证体系可收敛于AK中心。
AK中心架构图
文章图片
为了统一集团前端的开放认证体系,AK中心提供了适配层解决存量应用的client_token认证体系,同时兼容BUC认证,支持用户在服务端及浏览器端的调用认证,需要注意的是浏览器端仅支持BUC认证(AK需要签名,不能在前端做签名)
权限体系
权限体系由“开放服务、接口管控、用户体系、调用方体系和黑名单体系”构成。调用方可设置管理员与开发者,同时调用方在申请时需指定调用的开放服务,审批通过后调用方使用该AK密钥对指定调用对应的开放服务;开放服务管理员可设置开放接口的调用权限,目前分为“内部接口与开放接口”,仅开放接口可被调用方调用;黑名单可由具体开放服务管理员设置某个黑名单的调用方,禁止其调用。
稳定性建设
AK中心作为网关之后的第一道基础设施,它的稳定性与性能必须得到保障,其中稳定性要求AK中心运行时要足够稳定可靠,不因依赖的系统故障而崩溃。当前计划从几个方面做稳定性建设:
- 依赖解耦与降级
- 错误兜底数据
- 网关层流量拦截
若依赖的分布式缓存Tair发生故障时,自动降级为 “L1 LRU内存缓存+DB”的策略,若此时DB也发生故障则降级为 L1内存缓存,支撑热点数据与请求。
AK中心设计之初是有预估请求量的,若某些开放接口被攻击或大量调用导致AK中心的计算资源(加密与签名)被耗尽造成不可用,需在网关接入层进行流量过滤,针对预设的QPS进行限流,防止AK中心被搞挂。
性能优化
【业务网关之AK中心建设】所有调用开放接口的请求都会经过AK中心,因此AK处理性能直接影响开放接口的性能。优化的策略根据不同的认证方式也有所不同:
- AK认证与client_token认证优化策略:L1 RLU内存缓存 + 三方缓存,其中内存缓存需要重点建设,由于AK及token等热点数据命中率非常高,因此内存缓存使用率非常高。由于Node多进程模型的特点,若要在每个业务进程中单独做缓存,命中率会非常差,因此需要基于Agent模型建设Work进程间共享的全局内存缓存。
- BUC认证优化策略:通过持久化到Cookie进行缓存,当SSO_TOKEN未超时直接从Cookie反序列化,避免调用到BUC中心
推荐阅读
- python办公自动化系列之金蝶K3(三)
- Nebula|Nebula Graph解决风控业务实践
- Netty之非阻塞处理
- 让技术创造价值之手把手教你薅羊毛篇
- SringBoot之yaml语法
- 《剑指offer》之利用单调栈法求直方图最大矩形面积
- 源声|听听赛博堡垒的锻造之路,以及云安全那些事儿
- 干货分享|接口测试系列之——接口安全测试
- Java入门之基础程序设计
- 摘录|皮克斯创始人之一约翰·拉塞特今年底将正式离职,他对于动画世界的贡献无法被磨灭