在单点登录(SSO)架构中,若认证中心(如CAS或OAuth授权服务器)发生故障无法提供服务,你有哪些应对策略?又如何确保已经登录的用户在认证中心故障期间仍能正常使用业务系统?请结合方案、取舍和风险说明。
考察说明
考查候选人对SSO架构高可用设计以及登录态隔离的理解,尤其关注认证中心故障时的降级策略。
回答思路
- 【回答框架 1】核心思路是‘认证中心负责登录,业务系统负责会话’。用户登录后,业务系统保存自己的会话令牌(如Cookie或JWT),后续请求只需本地校验,无需每次回源认证中心,因此认证中心宕机不影响已登录用户的正常访问,除非会话需要刷新或过期需要重新认证。
- 【回答框架 2】高可用层面,认证中心本身应做集群部署、负载均衡和健康检查,配置多节点和故障转移,有条件时可跨机房容灾。同时要设置合理的会话超时和心跳机制,避免认证中心短暂故障引发大规模失效。
- 【回答框架 3】对于已登录用户的会话,可以采用JWT等无状态令牌,业务系统通过校验签名即可信任用户身份,无需实时查询认证中心。但需注意令牌吊销问题,可通过黑名单或缩短有效期来平衡。若使用集中式会话存储,则需考虑该存储的可用性,必要时做本地缓存和异步同步。
- 【回答框架 4】在认证中心完全不可用时,可设计降级策略:如保留服务器间同步的会话副本,或允许用户继续使用已有会话直到自然过期,同时限制新的登录操作。也可使用客户端反向通道或浏览器缓存减轻认证中心压力。
- 【回答框架 5】任何方案都要在一致性、安全性和可用性之间取舍。例如JWT注销不及时可能带来风险,需配合黑名单或短期令牌。降级期间应监控告警,恢复后及时同步状态,防止会话不一致导致安全问题。
- 【关键点 1】已登录用户的会话校验应尽量本地化,避免每次请求回源认证中心。
- 【关键点 2】认证中心应做高可用部署,如集群、负载均衡、容灾。
- 【关键点 3】JWT无状态令牌能降低对认证中心的依赖,但需处理吊销问题。
- 【关键点 4】降级策略需明确边界,如禁止新登录、允许现有会话续期。
- 【关键点 5】最终方案依赖业务安全要求,需在可用性和安全间折中。
- 【易错点 1】认为认证中心必须实时在线才能校验会话,导致误以为故障时所有用户失效。
- 【易错点 2】忽略JWT过期或吊销不及时带来的安全风险,以为无状态令牌绝对可靠。
- 【易错点 3】没有考虑集中式会话存储的可用性,其故障同样影响会话读取。