这是平台的核心服务之一。整个平台,不管什么应用,用户和权限都统一进行管理。在一个大型应用平台里,这部分调用非常频繁,其稳定性、反应速度都对平台的影响很大。所以一般情况下,这部分服务会启动多份。多个服务之间就有了数据同步的问题。
解决这个问题的核心是使用redis高速缓存。不管哪个服务认证,其认证结果(表现为jwt)缓存在同一个redis中,用户的权限模型计算结果(角色叠加、规则应用)缓存其中。这样各个服务不做重复性工作,数据也能得到统一。
用户的权限模型计算结果是用户登录时计算的,注销时销毁。当用户登录后,后台又同时修改权限定义时,用户的权限不能及时线上更新。所以要求用户必须重新登录。这个看起来是个缺陷,但是解决这个问题的代价还是比较大的。所以平台花了很大代价仅仅换来用户无需二次登录到底值不值的是个可探讨的问题。我们最终选择了要求二次登录。平台类似这样的案例很多。在技术邻域有很多类似的不可能三角,对于这些问题的取舍之道也是平台的价值所在。我在介绍平台时也会重点介绍这些,也欢迎大家一起讨论。