开篇词-企业级CAS单点登录实战

0 阅读5分钟

当时公司的系统越来越多。管理后台一套登录,项目管理工具Jira一套登录,Confluence Wiki又一套登录。

新员工入职,要创建三次账号。员工忘密码,IT经常帮忙重置。员工离职,又要一个系统一个系统禁用账号。

更麻烦的是,有时候认证中心退出了,另外两个系统居然还能继续访问。

后来,我们就开始做一套统一认证。

我曾经落地过一套企业级单点登录(SSO),把内部管理后台、Jira、知识库这三个系统都接到同一个认证中心。后来,这套方案也一直作为公司的统一认证方案在用。本专栏会按我们当时做项目的顺序,从需求、架构一直讲到代码,一共九篇。

为什么要做SSO

image

左边是改造之前,每个系统各认各的密码。右边是接入SSO之后,登录都统一交给认证中心,员工登录一次,三个系统都能进。

一说SSO,大家第一反应往往是「登录一次,到处都能登录」。

往下做,你会发现远远不只是登录一次这么简单。

还有下面几件事要解决:

  1. 统一身份:一个人、一个主账号,各系统认的是同一张用户主数据。
  2. 统一登录入口:未登录时跳到认证中心,而不是每个系统各画一张登录页。
  3. 统一登出:在认证中心退一次,关联系统会话一起失效。
  4. 可扩展接入:新系统接入有章可循,而不是每次临时摸索。

我为什么写这个专栏

网上写SSO的文章不少,常见的是把CAS协议和几个接口讲清楚。

可到了落项目的时候,你会发现问题根本不是登录,而是:

  • 第三方系统怎么接?
  • 新系统怎么注册?
  • 网关放哪里?
  • 登录和登出怎么统一?
  • OAuth2和CAS到底怎么配合?

所以这套专栏,我就按我们当时项目落地的顺序,一步一步写。里面会涉及管理后台、协作平台、知识库这三类最常见的接入场景,不是Demo,也不是Hello World。

本专栏解决什么问题

企业里最常见的就是下面三类系统(细节放在第02篇PRD):

类型专栏中的叫法一句话说明
自研后台内部管理后台前后端分离,走一条登录路线
外部协作协作平台A(Jira)成熟Web产品,走另一条路线
外部文档知识库(Confluence)同上,产品不同,接法类似

学完CAS以后,一到项目里,下面这几个问题就会冒出来:

  • 什么时候用OAuth2,什么时候用CAS? 自研前后端分离后台和第三方Web产品,接入方式不一样,不能硬套同一种协议。
  • 业务系统拿到的凭证长什么样? 自研后台拿的是网关换取的业务JWT;第三方系统拿的是CAS一次性票据,向认证中心校验通过后在本地建立Session。
  • 为什么要有网关? 管理后台的API流量需要统一鉴权,登录入口也适合收敛在网关,这部分第06篇展开。
  • 单点登出怎么才算真登出? 认证中心退一次,自研后台的旧令牌和第三方系统的本地会话都要失效,第08篇专门讲。

这些东西现在不用急着记,我们后面再慢慢展开。

image

这张图不用记细节。浏览器请求从网关进来,登录交给认证中心,后面还有用户主数据,管理后台和第三方系统都接在这套体系里。具体模块为什么这么设计,第03篇会讲清楚。

专栏目录

image

我没有按知识点去拆,而是按当时项目推进的顺序来写。

先定需求,再定架构,再把认证中心搭起来,然后一个系统一个系统接进去,最后把单点登出补完整。

  1. 开篇词(本篇)
  2. 需求PRD:应用清单、场景对比、验收边界
  3. 技术架构设计方案:整体架构准绳
  4. CAS认证中心:多方式登录与JDBC认证
  5. 服务注册与环境隔离
  6. OAuth2与网关:前后端分离单点登录
  7. CAS协议:第三方应用接入实战
  8. 单点登出与全局会话失效
  9. 专栏总结与新应用接入指南

系统大概长什么样

一提SSO,大家第一个想到的就是CAS。

CAS只是其中一个模块。还有网关、用户主数据、业务令牌、管理后台。

现在不用关心实现,先知道整个系统有哪些模块:

模块干什么
认证中心统一登录页、发票据、登记接入应用、编排单点登出
网关管理后台的登录入口和API流量入口
用户主数据存查员工账号,登录时把邮箱、工号、扫码结果解析成同一个人
管理端用户服务给管理后台签发业务令牌,接收认证中心的登出通知

四个模块为什么这么设计、各自负责什么,第03篇架构设计会讲清楚。

技术栈

整套方案基于JAVA 17,Apereo CAS、Spring Cloud Gateway、Spring Boot等企业常用技术栈实现,具体版本和选型理由在架构篇说明。

学完之后你能做什么

image

就是以后公司让你做SSO的时候,你知道第一步该干什么,第二步该干什么。

如果哪天领导跟你说:「把这个新系统接进统一认证。」

我希望你不会一脸懵,而是知道应该先去看认证中心、还是去改网关、还是注册CAS服务。