什么是AKAK(AccessKey)是一种身份证明,解决的是“谁是资源的使用者”的问题。比如在生活中,身份证可以证明你是你,在云计算或者程序中,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中心架构图为统一集团前端开放认证体系,AK中心提供适配层解决现有应用的client_token认证体系,并兼容BUC认证,支持用户调用认证服务器和浏览器。需要注意的是浏览器端只支持BUC认证(AK需要签名,不能在前端签名)。权限系统权限系统由“服务开放、接口控制、用户系统、调用者系统、黑名单系统”组成。调用方可以设置管理员和开发者,同时调用方在申请时需要指定调用的开放服务。审核通过后,调用方使用AK密钥对指定要调用的对应开放服务;开放服务管理员可以设置开放接口调用权限目前分为“内部接口和开放接口”。只有开放的接口才能被调用者调用;黑名单可以由具体的开放服务管理员设置,禁止黑名单的调用者。稳定性建设AK中心是继网关之后的第一基础设施,其稳定性和性能必须得到保证,而稳定性要求AK中心足够稳定可靠,不会因为其所依赖的系统故障而崩溃。目前的计划是从几个方面来构建稳定性:依赖解耦和降级错误。数据网关层流量拦截。关于依赖解耦,主要是DB。目前AK中心使用DB存储AK密钥对、用户、调用方、服务方等基本信息和权限信息。其中,“AK密钥对和权限数据”与运行时相关,这部分数据的特点是不易更改(设??计初衷是权限数据只支持加法)。因此,对这部分热点数据实施二级缓存策略(加速层),在内存中建立LRU缓存,同时建立分布式缓存(暂未实现),并制定数据刷新策略(在缓存结束后刷新二级缓存)DB回源),如果DB发生故障,可以使用二级缓存中的数据,不影响现有业务。如果依赖的分布式缓存Tair失效,会自动降级为“L1LRU内存缓存+DB”策略。如果此时DB也出现故障,则会降级为L1内存缓存,以支持热数据和请求。AK中心在设计之初,就有一个预估的请求量。如果部分开放接口被攻击或大量调用导致AK中心的计算资源(加密和签名)耗尽不可用,需要在网关接入层进行流量过滤,为AK中心限流预设QPS,防止AK中心挂掉。性能优化所有调用开放接口的请求都会经过AK中心,因此AK的处理性能直接影响到开放接口的性能。优化策略也根据认证方式不同而不同:AK认证和client_token认证优化策略:L1RLU内存缓存+三方缓存,其中主要需要构建内存缓存。由于AK、token等热点数据的命中率非常高,内存缓存的使用率非常高。由于Node多进程模型的特点,如果要在每个业务进程中单独缓存,命中率会很差。因此,有必要基于Agent模型构建Work进程间共享的全局内存缓存。BUC鉴权优化策略:持久化到Cookie缓存,SSO_TOKEN未超时直接从Cookie反序列化,避免调用BUC中心
