用户系统
用户系统主要负责用户登录、注册、注销、获取或修改用户信息等用户相关业务,在业务范围或系统访问量比较庞大时通常作为独立系统组件服务于其他业务子系统而存在,在业务量较少时,也可以与网关系统合并,实现在同一系统组件内
网关系统
网关系统作为所有业务子系统的入口,主要负责路由、认证/鉴权、日志统计等非具体业务场景,网关承载了整个系统中所有组件的入口流量,是系统中对性能和可用性要求最高的组件
认证/鉴权方案
系统组件可划分为有状态组件和无状态组件,因此认证/鉴权方案也可划分为基于组件状态的方案和无状态方案
基于组件状态的方案
Session
Session 是最常用的传统用户会话方案,在用户初次访问系统时初始化,注销或会话超时时销毁,用于存储此次会话的状态,登陆和注销操作会影响会话状态,比如已登陆标识,用户 ID,用户接口权限表等,这些状态可控制网关或业务接口的行为,Session(或称登陆)有效时长可在用户每次访问系统后自动延长,超过一定时间未访问,由系统自动销毁,用户下次重新访问时获取新的 Session
无状态方案
无状态方案相对于基于组件状态的方案,系统可用性更强,会话状态不会随着组件实例的销毁而丢失
Redis
类似于 Session 的用户会话状态管理机制,但状态并不存储在组件内存中,而是通过 Redis 进行存储,Redis 也可解决多实例状态共享的问题
JWT
JWT 方案并不在内存中维护会话状态,而是将必要的用户和会话信息、有效时长等,通过特定的带有密钥的数字签名算法进行签名,再以特定的格式发行,各系统组件只需拥有同一个签名密钥,并按照约定的格式解析,即可对任意携带该 JWT 信息的请求进行签名认证,这种认证方式简单高效,系统维护性也较高,但 JWT 生成和派发后无法更改和回收,只能由客户端主动丢弃或等待失效,如果需要延长有效期,也只能由客户端主动发起刷新请求,在超时前根据即将失效的 JWT token 获取新的 JWT token,以此达到延长会话的目的