20 年沉淀,CAS 8.0 重新定义企业级 SSO:适配 JDK 25 与 Spring Boot 4.1

20 年沉淀,CAS 8.0 重新定义企业级 SSO:适配 JDK 25 与 Spring Boot 4.1


很少有人会想起一款已经活了二十多年、至今仍保持高频发版的开源身份中间件:Apereo CAS 。它绝非过时的历史包袱------2026 年 7 月 18 日 CAS 8.0.0 正式 GA,8 月 14 日发布 8.0.1 补丁,8 月 28 日 8.1.0 首个候选版上线,底层直接对齐 JDK 25 与 Spring Boot 4.1。


一、开源出身:从耶鲁校园项目到基金会旗舰平台

CAS 全称 Central Authentication Service ,最早诞生于 2004 年前后的耶鲁大学,初衷是解决校园内数十个系统重复登录的问题。后来项目捐赠给专注教育与非营利领域的 Apereo 基金会 ,代码托管在 GitHub,采用 Apache License 2.0 协议,商用、二开、闭源衍生均无传染性限制,仅需保留版权声明。

项目属性 说明
治理模式 PMC 治理,核心贡献者来自多家身份基础设施厂商与高校工程师
协议独立性 CAS 协议独立于实现,Java、.NET、PHP、Python 等主流语言都有客户端
用户范围 早已超出教育行业,大量政府、金融、医疗和大型企业的内网 SSO 都运行在 CAS 之上

这种出身决定了它的基因:天生面向异构系统多、厂商多、身份关系复杂、合规要求高的场景。


二、2026 版本线:两条基线,选错麻烦半年

目前 CAS 有两条活跃版本线,选型错了可能平添半年运维成本:
#mermaid-svg-OEnINvCbf2RKYhku{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-OEnINvCbf2RKYhku .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-OEnINvCbf2RKYhku .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-OEnINvCbf2RKYhku .error-icon{fill:#552222;}#mermaid-svg-OEnINvCbf2RKYhku .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-OEnINvCbf2RKYhku .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-OEnINvCbf2RKYhku .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-OEnINvCbf2RKYhku .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-OEnINvCbf2RKYhku .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-OEnINvCbf2RKYhku .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-OEnINvCbf2RKYhku .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-OEnINvCbf2RKYhku .marker{fill:#333333;stroke:#333333;}#mermaid-svg-OEnINvCbf2RKYhku .marker.cross{stroke:#333333;}#mermaid-svg-OEnINvCbf2RKYhku svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-OEnINvCbf2RKYhku p{margin:0;}#mermaid-svg-OEnINvCbf2RKYhku .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-OEnINvCbf2RKYhku .cluster-label text{fill:#333;}#mermaid-svg-OEnINvCbf2RKYhku .cluster-label span{color:#333;}#mermaid-svg-OEnINvCbf2RKYhku .cluster-label span p{background-color:transparent;}#mermaid-svg-OEnINvCbf2RKYhku .label text,#mermaid-svg-OEnINvCbf2RKYhku span{fill:#333;color:#333;}#mermaid-svg-OEnINvCbf2RKYhku .node rect,#mermaid-svg-OEnINvCbf2RKYhku .node circle,#mermaid-svg-OEnINvCbf2RKYhku .node ellipse,#mermaid-svg-OEnINvCbf2RKYhku .node polygon,#mermaid-svg-OEnINvCbf2RKYhku .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-OEnINvCbf2RKYhku .rough-node .label text,#mermaid-svg-OEnINvCbf2RKYhku .node .label text,#mermaid-svg-OEnINvCbf2RKYhku .image-shape .label,#mermaid-svg-OEnINvCbf2RKYhku .icon-shape .label{text-anchor:middle;}#mermaid-svg-OEnINvCbf2RKYhku .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-OEnINvCbf2RKYhku .rough-node .label,#mermaid-svg-OEnINvCbf2RKYhku .node .label,#mermaid-svg-OEnINvCbf2RKYhku .image-shape .label,#mermaid-svg-OEnINvCbf2RKYhku .icon-shape .label{text-align:center;}#mermaid-svg-OEnINvCbf2RKYhku .node.clickable{cursor:pointer;}#mermaid-svg-OEnINvCbf2RKYhku .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-OEnINvCbf2RKYhku .arrowheadPath{fill:#333333;}#mermaid-svg-OEnINvCbf2RKYhku .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-OEnINvCbf2RKYhku .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-OEnINvCbf2RKYhku .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OEnINvCbf2RKYhku .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-OEnINvCbf2RKYhku .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OEnINvCbf2RKYhku .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-OEnINvCbf2RKYhku .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-OEnINvCbf2RKYhku .cluster text{fill:#333;}#mermaid-svg-OEnINvCbf2RKYhku .cluster span{color:#333;}#mermaid-svg-OEnINvCbf2RKYhku div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-OEnINvCbf2RKYhku .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-OEnINvCbf2RKYhku rect.text{fill:none;stroke-width:0;}#mermaid-svg-OEnINvCbf2RKYhku .icon-shape,#mermaid-svg-OEnINvCbf2RKYhku .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-OEnINvCbf2RKYhku .icon-shape p,#mermaid-svg-OEnINvCbf2RKYhku .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-OEnINvCbf2RKYhku .icon-shape .label rect,#mermaid-svg-OEnINvCbf2RKYhku .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-OEnINvCbf2RKYhku .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-OEnINvCbf2RKYhku .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-OEnINvCbf2RKYhku :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} CAS 7.3 维护线
7.3.8.2 于 2026 年 9 月发布
要求:JDK 21
适配企业常规 LTS 技术栈
仍在安全维护窗口内
CAS 8.0 新世代线
8.0.0 于 2026 年 7 月 GA
8.0.1 补丁已发布
基线:JDK 25
依赖:Spring Framework 7.0

Spring Boot 4.1

Spring Security 7.1

版本线 最新版本 JDK 基线 Spring 生态 适用场景
8.0 新世代线 8.0.1 JDK 25 Spring Framework 7.0 / Boot 4.1 / Security 7.1 新项目、正在做 JDK 25 升级的团队
7.3 维护线 7.3.8.2 JDK 21 企业常规 LTS 技术栈 生产环境偏保守、JDK 基线停在 21 的团队

发布节奏与 EOL

CAS 采用严格的时间驱动发布:

  • 每个小版本发布后 六个月内接受 bug 修复 + 安全补丁
  • 之后 六个月仅收安全补丁
  • 通常同时保持三条活跃分支

选型建议 :新项目或正在做 JDK 25、Spring Boot 4.1 升级的团队,直接选 8.0.1 ;生产环境偏保守、JDK 基线停在 21 的团队,7.3.8.2 是最稳妥的选择,但要盯住六个月的 EOL 节奏,避免落在停止维护的版本上。


三、整体架构:收敛攻击面的核心设计

CAS 系统分为两个物理部件:CAS Server 和 CAS Client。
#mermaid-svg-A5RCH6JLg9XHs5UF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-A5RCH6JLg9XHs5UF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-A5RCH6JLg9XHs5UF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-A5RCH6JLg9XHs5UF .error-icon{fill:#552222;}#mermaid-svg-A5RCH6JLg9XHs5UF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-A5RCH6JLg9XHs5UF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-A5RCH6JLg9XHs5UF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-A5RCH6JLg9XHs5UF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-A5RCH6JLg9XHs5UF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-A5RCH6JLg9XHs5UF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-A5RCH6JLg9XHs5UF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-A5RCH6JLg9XHs5UF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-A5RCH6JLg9XHs5UF .marker.cross{stroke:#333333;}#mermaid-svg-A5RCH6JLg9XHs5UF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-A5RCH6JLg9XHs5UF p{margin:0;}#mermaid-svg-A5RCH6JLg9XHs5UF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-A5RCH6JLg9XHs5UF .cluster-label text{fill:#333;}#mermaid-svg-A5RCH6JLg9XHs5UF .cluster-label span{color:#333;}#mermaid-svg-A5RCH6JLg9XHs5UF .cluster-label span p{background-color:transparent;}#mermaid-svg-A5RCH6JLg9XHs5UF .label text,#mermaid-svg-A5RCH6JLg9XHs5UF span{fill:#333;color:#333;}#mermaid-svg-A5RCH6JLg9XHs5UF .node rect,#mermaid-svg-A5RCH6JLg9XHs5UF .node circle,#mermaid-svg-A5RCH6JLg9XHs5UF .node ellipse,#mermaid-svg-A5RCH6JLg9XHs5UF .node polygon,#mermaid-svg-A5RCH6JLg9XHs5UF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-A5RCH6JLg9XHs5UF .rough-node .label text,#mermaid-svg-A5RCH6JLg9XHs5UF .node .label text,#mermaid-svg-A5RCH6JLg9XHs5UF .image-shape .label,#mermaid-svg-A5RCH6JLg9XHs5UF .icon-shape .label{text-anchor:middle;}#mermaid-svg-A5RCH6JLg9XHs5UF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-A5RCH6JLg9XHs5UF .rough-node .label,#mermaid-svg-A5RCH6JLg9XHs5UF .node .label,#mermaid-svg-A5RCH6JLg9XHs5UF .image-shape .label,#mermaid-svg-A5RCH6JLg9XHs5UF .icon-shape .label{text-align:center;}#mermaid-svg-A5RCH6JLg9XHs5UF .node.clickable{cursor:pointer;}#mermaid-svg-A5RCH6JLg9XHs5UF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-A5RCH6JLg9XHs5UF .arrowheadPath{fill:#333333;}#mermaid-svg-A5RCH6JLg9XHs5UF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-A5RCH6JLg9XHs5UF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-A5RCH6JLg9XHs5UF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-A5RCH6JLg9XHs5UF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-A5RCH6JLg9XHs5UF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-A5RCH6JLg9XHs5UF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-A5RCH6JLg9XHs5UF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-A5RCH6JLg9XHs5UF .cluster text{fill:#333;}#mermaid-svg-A5RCH6JLg9XHs5UF .cluster span{color:#333;}#mermaid-svg-A5RCH6JLg9XHs5UF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-A5RCH6JLg9XHs5UF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-A5RCH6JLg9XHs5UF rect.text{fill:none;stroke-width:0;}#mermaid-svg-A5RCH6JLg9XHs5UF .icon-shape,#mermaid-svg-A5RCH6JLg9XHs5UF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-A5RCH6JLg9XHs5UF .icon-shape p,#mermaid-svg-A5RCH6JLg9XHs5UF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-A5RCH6JLg9XHs5UF .icon-shape .label rect,#mermaid-svg-A5RCH6JLg9XHs5UF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-A5RCH6JLg9XHs5UF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-A5RCH6JLg9XHs5UF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-A5RCH6JLg9XHs5UF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} CAS Server 中心节点
业务应用集群
票据校验
票据校验
票据校验
票据校验
应用 1
应用 2
应用 3
...应用 N
Web 层

Spring MVC + Webflow
票据子系统

TGT / ST
认证子系统

可插拔认证链
票据注册表
服务注册表

最关键的架构边界是:业务应用永远不碰密码。 密码只在中心服务端校验,攻击面从数百个应用收敛到一个节点。

服务端内部三层子系统

子系统 职责
Web 层 基于 Spring MVC + Spring Webflow,登录、登出、MFA 确认、密码重置等所有用户流程都是状态机驱动,页面用 Thymeleaf 渲染
票据子系统 SSO 核心逻辑。登录成功后签发 TGT 并写入加密 Cookie,访问业务系统时凭 TGT 换发一次性的 ST,业务系统再通过后端通道校验 ST 有效性
认证子系统 可插拔的认证处理器链,仅在建立会话和强制重认证时执行

支撑这三层的是两个可插拔注册表:

  • 票据注册表:决定会话存储方式,生产环境可替换为 Redis、Hazelcast 等
  • 服务注册表:定义接入应用的权限与策略

配置沿用 Spring Boot 风格,采用官方 WAR Overlay 模板构建,自定义代码与上游依赖物理隔离,升级仅需换版本号。


四、核心能力:不止是登录,是完整的身份平台

4.1 一个账号体系,兼容五种主流协议

这是 CAS 相比新一代纯 OIDC 身份产品最大的差异化:

协议 适用场景
CAS 协议 1/2/3 遗留 Java 老应用
SAML 1.1/2.0 Confluence/JIRA 等商业软件
OpenID Connect 新写的移动 App / SPA
OAuth 2.0 Spring Boot 微服务
WS-Federation 微软生态系统

意味着这些系统可以共享同一套用户目录、同一次 SSO 会话、同一套 MFA 策略和审计日志 。CAS 本质上是一个多协议翻译中枢,解决企业里"不同年代系统说不同语言"的最大痛点。

4.2 认证与 MFA 的完整军火库

#mermaid-svg-zxaUO1OZ6TuWN3JG{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-zxaUO1OZ6TuWN3JG .error-icon{fill:#552222;}#mermaid-svg-zxaUO1OZ6TuWN3JG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-zxaUO1OZ6TuWN3JG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-zxaUO1OZ6TuWN3JG .marker.cross{stroke:#333333;}#mermaid-svg-zxaUO1OZ6TuWN3JG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-zxaUO1OZ6TuWN3JG p{margin:0;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge{stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section--1 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section--1 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section--1 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section--1 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section--1 path{fill:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section--1 text{fill:#ffffff;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon--1{font-size:40px;color:#ffffff;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge--1{stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth--1{stroke-width:17;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section--1 line{stroke:hsl(60, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-0 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-0 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-0 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-0 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-0 path{fill:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-0 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-0{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-0{stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-0{stroke-width:14;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-0 line{stroke:hsl(240, 100%, 83.5294117647%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-1 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-1 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-1 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-1 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-1 path{fill:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-1 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-1{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-1{stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-1{stroke-width:11;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-1 line{stroke:hsl(260, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-2 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-2 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-2 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-2 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-2 path{fill:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-2 text{fill:#ffffff;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-2{font-size:40px;color:#ffffff;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-2{stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-2{stroke-width:8;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-2 line{stroke:hsl(90, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-3 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-3 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-3 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-3 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-3 path{fill:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-3 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-3{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-3{stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-3{stroke-width:5;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-3 line{stroke:hsl(120, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-4 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-4 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-4 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-4 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-4 path{fill:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-4 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-4{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-4{stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-4{stroke-width:2;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-4 line{stroke:hsl(150, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-5 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-5 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-5 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-5 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-5 path{fill:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-5 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-5{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-5{stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-5{stroke-width:-1;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-5 line{stroke:hsl(180, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-6 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-6 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-6 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-6 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-6 path{fill:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-6 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-6{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-6{stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-6{stroke-width:-4;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-6 line{stroke:hsl(210, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-7 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-7 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-7 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-7 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-7 path{fill:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-7 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-7{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-7{stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-7{stroke-width:-7;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-7 line{stroke:hsl(270, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-8 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-8 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-8 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-8 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-8 path{fill:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-8 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-8{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-8{stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-8{stroke-width:-10;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-8 line{stroke:hsl(330, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-9 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-9 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-9 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-9 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-9 path{fill:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-9 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-9{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-9{stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-9{stroke-width:-13;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-9 line{stroke:hsl(0, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-10 rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-10 path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-10 circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-10 polygon,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-10 path{fill:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-10 text{fill:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .node-icon-10{font-size:40px;color:black;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-edge-10{stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge-depth-10{stroke-width:-16;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-10 line{stroke:hsl(30, 100%, 86.2745098039%);stroke-width:3;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:lightgray;}#mermaid-svg-zxaUO1OZ6TuWN3JG .disabled text{fill:#efefef;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-root rect,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-root path,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-root circle,#mermaid-svg-zxaUO1OZ6TuWN3JG .section-root polygon{fill:hsl(240, 100%, 46.2745098039%);}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-root text{fill:#ffffff;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-root span{color:#ffffff;}#mermaid-svg-zxaUO1OZ6TuWN3JG .section-2 span{color:#ffffff;}#mermaid-svg-zxaUO1OZ6TuWN3JG .icon-container{height:100%;display:flex;justify-content:center;align-items:center;}#mermaid-svg-zxaUO1OZ6TuWN3JG .edge{fill:none;}#mermaid-svg-zxaUO1OZ6TuWN3JG .mindmap-node-label{dy:1em;alignment-baseline:middle;text-anchor:middle;dominant-baseline:middle;text-align:center;}#mermaid-svg-zxaUO1OZ6TuWN3JG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} CAS 认证能力
认证方式
LDAP / AD
JDBC
Kerberos 域免密
X.509 证书
认证链组合
MFA 形态
TOTP 软令牌
FIDO2 / WebAuthn
YubiKey
推送认证
触发策略
服务粒度
用户属性
IP 段
风险评分
生命周期
密码自助重置
账号自注册
登录防爆破
会话管理
模拟登录

例如:访问财务系统强制 FIDO2,外网访问必须 MFA,内网办公仅需 TOTP------这种自适应 MFA 在商业 IAM 中是高级功能,在 CAS 里只是配置项。

4.3 服务治理与审计能力

服务注册表是 CAS 作为平台 而非登录接口的核心:

能力 说明
访问策略 可在中心侧做粗粒度权限控制,不满足条件的用户在登录页就被拦截
属性释放 可针对不同应用返回不同字段,最小化数据暴露
审计能力 覆盖全链路事件,可对接日志、SIEM,天然满足等保、金融等合规场景的追溯要求

4.4 委托认证:既能当 IdP,也能当身份代理

很多组织已有企业微信、钉钉、Azure AD、GitHub 等主身份源,不想再维护一套账号密码。CAS 支持委托认证:
#mermaid-svg-SJHUUOpCMxJ89IRL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-SJHUUOpCMxJ89IRL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-SJHUUOpCMxJ89IRL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-SJHUUOpCMxJ89IRL .error-icon{fill:#552222;}#mermaid-svg-SJHUUOpCMxJ89IRL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SJHUUOpCMxJ89IRL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-SJHUUOpCMxJ89IRL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SJHUUOpCMxJ89IRL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SJHUUOpCMxJ89IRL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-SJHUUOpCMxJ89IRL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SJHUUOpCMxJ89IRL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SJHUUOpCMxJ89IRL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SJHUUOpCMxJ89IRL .marker.cross{stroke:#333333;}#mermaid-svg-SJHUUOpCMxJ89IRL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SJHUUOpCMxJ89IRL p{margin:0;}#mermaid-svg-SJHUUOpCMxJ89IRL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SJHUUOpCMxJ89IRL .cluster-label text{fill:#333;}#mermaid-svg-SJHUUOpCMxJ89IRL .cluster-label span{color:#333;}#mermaid-svg-SJHUUOpCMxJ89IRL .cluster-label span p{background-color:transparent;}#mermaid-svg-SJHUUOpCMxJ89IRL .label text,#mermaid-svg-SJHUUOpCMxJ89IRL span{fill:#333;color:#333;}#mermaid-svg-SJHUUOpCMxJ89IRL .node rect,#mermaid-svg-SJHUUOpCMxJ89IRL .node circle,#mermaid-svg-SJHUUOpCMxJ89IRL .node ellipse,#mermaid-svg-SJHUUOpCMxJ89IRL .node polygon,#mermaid-svg-SJHUUOpCMxJ89IRL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SJHUUOpCMxJ89IRL .rough-node .label text,#mermaid-svg-SJHUUOpCMxJ89IRL .node .label text,#mermaid-svg-SJHUUOpCMxJ89IRL .image-shape .label,#mermaid-svg-SJHUUOpCMxJ89IRL .icon-shape .label{text-anchor:middle;}#mermaid-svg-SJHUUOpCMxJ89IRL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-SJHUUOpCMxJ89IRL .rough-node .label,#mermaid-svg-SJHUUOpCMxJ89IRL .node .label,#mermaid-svg-SJHUUOpCMxJ89IRL .image-shape .label,#mermaid-svg-SJHUUOpCMxJ89IRL .icon-shape .label{text-align:center;}#mermaid-svg-SJHUUOpCMxJ89IRL .node.clickable{cursor:pointer;}#mermaid-svg-SJHUUOpCMxJ89IRL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-SJHUUOpCMxJ89IRL .arrowheadPath{fill:#333333;}#mermaid-svg-SJHUUOpCMxJ89IRL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SJHUUOpCMxJ89IRL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SJHUUOpCMxJ89IRL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SJHUUOpCMxJ89IRL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-SJHUUOpCMxJ89IRL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SJHUUOpCMxJ89IRL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-SJHUUOpCMxJ89IRL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SJHUUOpCMxJ89IRL .cluster text{fill:#333;}#mermaid-svg-SJHUUOpCMxJ89IRL .cluster span{color:#333;}#mermaid-svg-SJHUUOpCMxJ89IRL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SJHUUOpCMxJ89IRL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-SJHUUOpCMxJ89IRL rect.text{fill:none;stroke-width:0;}#mermaid-svg-SJHUUOpCMxJ89IRL .icon-shape,#mermaid-svg-SJHUUOpCMxJ89IRL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-SJHUUOpCMxJ89IRL .icon-shape p,#mermaid-svg-SJHUUOpCMxJ89IRL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-SJHUUOpCMxJ89IRL .icon-shape .label rect,#mermaid-svg-SJHUUOpCMxJ89IRL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-SJHUUOpCMxJ89IRL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-SJHUUOpCMxJ89IRL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-SJHUUOpCMxJ89IRL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 选择外部 IdP
返回断言
建立本地 SSO 会话
用户
企业微信 / 钉钉 / Azure AD
CAS
向下游签发票据
业务系统

也就是说,CAS 既能当身份提供方 给业务系统发令牌,也能当服务提供方 接入上游 IdP,两头做协议翻译。非常适合扫码登录、跨组织身份联邦、多 IdP 统一入口等场景。


五、8.0 代际升级:不只是换个版本号

8.0 版本的几个变化直接影响运维与升级决策:

变化 说明
运行时提速 JDK 25 基线带来 AOT 缓存优化,同等部署下启动时间从 7-9 秒压缩到约 5 秒,GraalVM 原生镜像支持持续打磨
配置强校验 cas 命名空间的配置启动时强制校验,拼写错误或未知属性直接拒绝启动。牺牲了部分兼容性,但消灭了"配置写错静默失效"的隐蔽风险
工程质量升级 引入空值契约注解,构建工具升级到 Gradle 9.6,测试覆盖率约 94%
架构简化 老式 Session 复制能力默认废弃,多节点 HA 统一走分布式票据注册表
协议增量 OIDC 联邦成为独立模块,支持作为信任锚实现多 IdP 互信;管理控制台功能增强,无密码登录、SCIM 账号自动配给能力持续完善

六、Spring Boot 集成详解:三条路径接入

CAS 与 Spring Boot 生态深度绑定,无论是身份服务端的搭建,还是业务系统的接入,都有标准化的 Maven 工程范式。

6.1 服务端:Maven WAR Overlay 构建

#mermaid-svg-DqaaPTNoIKSSoB0o{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DqaaPTNoIKSSoB0o .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DqaaPTNoIKSSoB0o .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DqaaPTNoIKSSoB0o .error-icon{fill:#552222;}#mermaid-svg-DqaaPTNoIKSSoB0o .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DqaaPTNoIKSSoB0o .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DqaaPTNoIKSSoB0o .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DqaaPTNoIKSSoB0o .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DqaaPTNoIKSSoB0o .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DqaaPTNoIKSSoB0o .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DqaaPTNoIKSSoB0o .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DqaaPTNoIKSSoB0o .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DqaaPTNoIKSSoB0o .marker.cross{stroke:#333333;}#mermaid-svg-DqaaPTNoIKSSoB0o svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DqaaPTNoIKSSoB0o p{margin:0;}#mermaid-svg-DqaaPTNoIKSSoB0o .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DqaaPTNoIKSSoB0o .cluster-label text{fill:#333;}#mermaid-svg-DqaaPTNoIKSSoB0o .cluster-label span{color:#333;}#mermaid-svg-DqaaPTNoIKSSoB0o .cluster-label span p{background-color:transparent;}#mermaid-svg-DqaaPTNoIKSSoB0o .label text,#mermaid-svg-DqaaPTNoIKSSoB0o span{fill:#333;color:#333;}#mermaid-svg-DqaaPTNoIKSSoB0o .node rect,#mermaid-svg-DqaaPTNoIKSSoB0o .node circle,#mermaid-svg-DqaaPTNoIKSSoB0o .node ellipse,#mermaid-svg-DqaaPTNoIKSSoB0o .node polygon,#mermaid-svg-DqaaPTNoIKSSoB0o .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DqaaPTNoIKSSoB0o .rough-node .label text,#mermaid-svg-DqaaPTNoIKSSoB0o .node .label text,#mermaid-svg-DqaaPTNoIKSSoB0o .image-shape .label,#mermaid-svg-DqaaPTNoIKSSoB0o .icon-shape .label{text-anchor:middle;}#mermaid-svg-DqaaPTNoIKSSoB0o .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DqaaPTNoIKSSoB0o .rough-node .label,#mermaid-svg-DqaaPTNoIKSSoB0o .node .label,#mermaid-svg-DqaaPTNoIKSSoB0o .image-shape .label,#mermaid-svg-DqaaPTNoIKSSoB0o .icon-shape .label{text-align:center;}#mermaid-svg-DqaaPTNoIKSSoB0o .node.clickable{cursor:pointer;}#mermaid-svg-DqaaPTNoIKSSoB0o .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DqaaPTNoIKSSoB0o .arrowheadPath{fill:#333333;}#mermaid-svg-DqaaPTNoIKSSoB0o .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DqaaPTNoIKSSoB0o .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DqaaPTNoIKSSoB0o .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DqaaPTNoIKSSoB0o .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DqaaPTNoIKSSoB0o .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DqaaPTNoIKSSoB0o .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DqaaPTNoIKSSoB0o .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DqaaPTNoIKSSoB0o .cluster text{fill:#333;}#mermaid-svg-DqaaPTNoIKSSoB0o .cluster span{color:#333;}#mermaid-svg-DqaaPTNoIKSSoB0o div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DqaaPTNoIKSSoB0o .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DqaaPTNoIKSSoB0o rect.text{fill:none;stroke-width:0;}#mermaid-svg-DqaaPTNoIKSSoB0o .icon-shape,#mermaid-svg-DqaaPTNoIKSSoB0o .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DqaaPTNoIKSSoB0o .icon-shape p,#mermaid-svg-DqaaPTNoIKSSoB0o .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DqaaPTNoIKSSoB0o .icon-shape .label rect,#mermaid-svg-DqaaPTNoIKSSoB0o .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DqaaPTNoIKSSoB0o .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DqaaPTNoIKSSoB0o .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DqaaPTNoIKSSoB0o :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 官方基础 WAR 包
Maven WAR 插件
开发者工程

配置/页面/扩展类
自动合并覆盖
最终可部署 WAR

核心优势:自定义代码与上游官方代码物理隔离,升级版本时几乎不用修改业务逻辑,只调整依赖的版本号即可。

核心依赖结构:

依赖类型 说明
基础 WAR 包 官方 CAS 服务端基础功能
独立模块 LDAP 认证源、Redis 分布式票据存储、OIDC 协议支持、JSON 文件服务注册、监控端点暴露、Thymeleaf 页面定制等

所有功能都以独立模块形式引入,不启用的模块不会加载,既不占用运行资源,也不会暴露多余端点。

核心配置项:

配置项 说明
访问域名与路径前缀 服务端的对外地址
票据存储方案 生产环境推荐切换为 Redis 分布式存储以支持多节点部署
服务注册来源 比如从 JSON 文件批量加载允许接入的业务应用
认证源对接 比如对接企业内部 LDAP 目录服务

前端与运维:

  • 开发环境可一键生成自签名证书用于测试
  • 生产环境必须替换为正式签发的证书
  • 登录页、错误页、邮件模板等前端资源,只需要在工程对应目录下放同名的页面文件,就会自动覆盖官方默认样式

生产部署:

  • 用 Spring Cloud Config 集中管理配置,实现动态刷新
  • 用 Spring Boot Admin 做运行时监控
  • CAS 原生暴露了完整的监控指标与健康检查端点,可直接接入企业现有监控体系

6.2 业务端:三种接入路径

#mermaid-svg-5SgRsZD3IEfe8mkX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5SgRsZD3IEfe8mkX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5SgRsZD3IEfe8mkX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5SgRsZD3IEfe8mkX .error-icon{fill:#552222;}#mermaid-svg-5SgRsZD3IEfe8mkX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5SgRsZD3IEfe8mkX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5SgRsZD3IEfe8mkX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5SgRsZD3IEfe8mkX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5SgRsZD3IEfe8mkX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5SgRsZD3IEfe8mkX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5SgRsZD3IEfe8mkX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5SgRsZD3IEfe8mkX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5SgRsZD3IEfe8mkX .marker.cross{stroke:#333333;}#mermaid-svg-5SgRsZD3IEfe8mkX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5SgRsZD3IEfe8mkX p{margin:0;}#mermaid-svg-5SgRsZD3IEfe8mkX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-5SgRsZD3IEfe8mkX .cluster-label text{fill:#333;}#mermaid-svg-5SgRsZD3IEfe8mkX .cluster-label span{color:#333;}#mermaid-svg-5SgRsZD3IEfe8mkX .cluster-label span p{background-color:transparent;}#mermaid-svg-5SgRsZD3IEfe8mkX .label text,#mermaid-svg-5SgRsZD3IEfe8mkX span{fill:#333;color:#333;}#mermaid-svg-5SgRsZD3IEfe8mkX .node rect,#mermaid-svg-5SgRsZD3IEfe8mkX .node circle,#mermaid-svg-5SgRsZD3IEfe8mkX .node ellipse,#mermaid-svg-5SgRsZD3IEfe8mkX .node polygon,#mermaid-svg-5SgRsZD3IEfe8mkX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5SgRsZD3IEfe8mkX .rough-node .label text,#mermaid-svg-5SgRsZD3IEfe8mkX .node .label text,#mermaid-svg-5SgRsZD3IEfe8mkX .image-shape .label,#mermaid-svg-5SgRsZD3IEfe8mkX .icon-shape .label{text-anchor:middle;}#mermaid-svg-5SgRsZD3IEfe8mkX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5SgRsZD3IEfe8mkX .rough-node .label,#mermaid-svg-5SgRsZD3IEfe8mkX .node .label,#mermaid-svg-5SgRsZD3IEfe8mkX .image-shape .label,#mermaid-svg-5SgRsZD3IEfe8mkX .icon-shape .label{text-align:center;}#mermaid-svg-5SgRsZD3IEfe8mkX .node.clickable{cursor:pointer;}#mermaid-svg-5SgRsZD3IEfe8mkX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5SgRsZD3IEfe8mkX .arrowheadPath{fill:#333333;}#mermaid-svg-5SgRsZD3IEfe8mkX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5SgRsZD3IEfe8mkX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5SgRsZD3IEfe8mkX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5SgRsZD3IEfe8mkX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5SgRsZD3IEfe8mkX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5SgRsZD3IEfe8mkX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5SgRsZD3IEfe8mkX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5SgRsZD3IEfe8mkX .cluster text{fill:#333;}#mermaid-svg-5SgRsZD3IEfe8mkX .cluster span{color:#333;}#mermaid-svg-5SgRsZD3IEfe8mkX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5SgRsZD3IEfe8mkX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5SgRsZD3IEfe8mkX rect.text{fill:none;stroke-width:0;}#mermaid-svg-5SgRsZD3IEfe8mkX .icon-shape,#mermaid-svg-5SgRsZD3IEfe8mkX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5SgRsZD3IEfe8mkX .icon-shape p,#mermaid-svg-5SgRsZD3IEfe8mkX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5SgRsZD3IEfe8mkX .icon-shape .label rect,#mermaid-svg-5SgRsZD3IEfe8mkX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5SgRsZD3IEfe8mkX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5SgRsZD3IEfe8mkX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5SgRsZD3IEfe8mkX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 存量 Java 系统
已用 Spring Security
全新 Spring Boot 项目
业务系统接入 CAS
技术栈现状
路径一:原生 CAS 客户端
路径二:Spring Security CAS 模块
路径三:标准 OIDC 接入

路径一:原生 Java CAS 客户端 + Spring Boot 自动装配

存量 Java 系统改造成本最低的方式,不依赖 Spring Security 体系。

项目 说明
集成方式 引入官方 Spring Boot 版 CAS 客户端依赖即可完成自动装配
核心配置 CAS 服务端访问前缀、登录页地址、当前业务系统访问地址、CAS3 协议校验模式
工作流程 客户端自动注册认证过滤器与票据校验过滤器;未登录请求 302 重定向到 CAS 登录页;登录完成后带回票据参数,过滤器在后端发起服务端到服务端的票据校验;校验通过后将用户身份信息与属性写入本地会话
适用场景 老系统快速接入、未使用 Spring Security 的传统 Spring Boot 应用
路径二:Spring Security CAS 模块

如果业务系统已经深度使用 Spring Security 的权限体系,可以用官方 Spring Security CAS 模块,将 CAS 认证接入现有过滤链,复用已有的授权逻辑。

事实澄清 :截至 Spring Security 7.1.1,官方的 spring-security-cas 模块仍在正常发布,7.0.x、7.1.x 均有正式发行包。CAS 并没有从 Spring Security 7 中移除,网上的过时传言不足为信。

项目 说明
集成方式 引入 Spring Security 官方的 CAS 模块依赖
配置逻辑 声明回调地址与服务标识,配置票据校验端点地址,将 CAS 认证结果转换为 Spring Security 标准的身份对象,加入安全过滤链
适用场景 已建立完善 Spring Security 权限模型的存量应用,不需要重构授权体系,只替换认证源
路径三:标准 OIDC 接入(新项目首选)

对于全新的 Spring Boot 项目,最推荐的方式是把 CAS 当成一个普通的 OIDC 身份提供方,用 Spring Security 原生的 OAuth2 登录能力接入,业务代码中完全不出现 CAS 专有 API。

项目 说明
集成方式 引入 Spring Boot 官方 OAuth2 客户端启动器
服务端准备 CAS 开启 OIDC 模块后提供标准协议发现端点;在服务注册表中将业务应用登记为 OIDC 客户端,分配客户端 ID、密钥,配置回调地址白名单
业务端配置 填写客户端凭证、权限范围,以及 CAS 服务端的 OIDC 发行地址
核心优势 完全遵循 OIDC 标准协议,业务系统与身份提供方彻底解耦。未来如果要把 CAS 换成 Keycloak、Azure AD 或其他 OIDC 平台,应用侧几乎零改动

七、协议选型原则

#mermaid-svg-nNtbBCYkaTOsSbNw{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nNtbBCYkaTOsSbNw .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nNtbBCYkaTOsSbNw .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nNtbBCYkaTOsSbNw .error-icon{fill:#552222;}#mermaid-svg-nNtbBCYkaTOsSbNw .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nNtbBCYkaTOsSbNw .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nNtbBCYkaTOsSbNw .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nNtbBCYkaTOsSbNw .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nNtbBCYkaTOsSbNw .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nNtbBCYkaTOsSbNw .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nNtbBCYkaTOsSbNw .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nNtbBCYkaTOsSbNw .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nNtbBCYkaTOsSbNw .marker.cross{stroke:#333333;}#mermaid-svg-nNtbBCYkaTOsSbNw svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nNtbBCYkaTOsSbNw p{margin:0;}#mermaid-svg-nNtbBCYkaTOsSbNw .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-nNtbBCYkaTOsSbNw .cluster-label text{fill:#333;}#mermaid-svg-nNtbBCYkaTOsSbNw .cluster-label span{color:#333;}#mermaid-svg-nNtbBCYkaTOsSbNw .cluster-label span p{background-color:transparent;}#mermaid-svg-nNtbBCYkaTOsSbNw .label text,#mermaid-svg-nNtbBCYkaTOsSbNw span{fill:#333;color:#333;}#mermaid-svg-nNtbBCYkaTOsSbNw .node rect,#mermaid-svg-nNtbBCYkaTOsSbNw .node circle,#mermaid-svg-nNtbBCYkaTOsSbNw .node ellipse,#mermaid-svg-nNtbBCYkaTOsSbNw .node polygon,#mermaid-svg-nNtbBCYkaTOsSbNw .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nNtbBCYkaTOsSbNw .rough-node .label text,#mermaid-svg-nNtbBCYkaTOsSbNw .node .label text,#mermaid-svg-nNtbBCYkaTOsSbNw .image-shape .label,#mermaid-svg-nNtbBCYkaTOsSbNw .icon-shape .label{text-anchor:middle;}#mermaid-svg-nNtbBCYkaTOsSbNw .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nNtbBCYkaTOsSbNw .rough-node .label,#mermaid-svg-nNtbBCYkaTOsSbNw .node .label,#mermaid-svg-nNtbBCYkaTOsSbNw .image-shape .label,#mermaid-svg-nNtbBCYkaTOsSbNw .icon-shape .label{text-align:center;}#mermaid-svg-nNtbBCYkaTOsSbNw .node.clickable{cursor:pointer;}#mermaid-svg-nNtbBCYkaTOsSbNw .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nNtbBCYkaTOsSbNw .arrowheadPath{fill:#333333;}#mermaid-svg-nNtbBCYkaTOsSbNw .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nNtbBCYkaTOsSbNw .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nNtbBCYkaTOsSbNw .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nNtbBCYkaTOsSbNw .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nNtbBCYkaTOsSbNw .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nNtbBCYkaTOsSbNw .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nNtbBCYkaTOsSbNw .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nNtbBCYkaTOsSbNw .cluster text{fill:#333;}#mermaid-svg-nNtbBCYkaTOsSbNw .cluster span{color:#333;}#mermaid-svg-nNtbBCYkaTOsSbNw div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nNtbBCYkaTOsSbNw .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nNtbBCYkaTOsSbNw rect.text{fill:none;stroke-width:0;}#mermaid-svg-nNtbBCYkaTOsSbNw .icon-shape,#mermaid-svg-nNtbBCYkaTOsSbNw .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nNtbBCYkaTOsSbNw .icon-shape p,#mermaid-svg-nNtbBCYkaTOsSbNw .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nNtbBCYkaTOsSbNw .icon-shape .label rect,#mermaid-svg-nNtbBCYkaTOsSbNw .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nNtbBCYkaTOsSbNw .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nNtbBCYkaTOsSbNw .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nNtbBCYkaTOsSbNw :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 协议选型
新系统
存量 Java 系统
跨厂商商业软件
优先 OIDC
CAS 原生协议
SAML

系统类型 推荐协议
新系统 优先用 OIDC
存量 Java 系统 用 CAS 原生协议
Confluence、JIRA 等跨厂商商业软件 用 SAML

八、总结

Apereo CAS 是一款被严重低估的身份中间件。它的价值不在于"新",而在于二十多年积累下来的完整能力矩阵:

核心优势 说明
多协议翻译中枢 同时支持 CAS、SAML、OIDC、OAuth2、WS-Federation
攻击面收敛 业务应用永远不碰密码,密码只在中心服务端校验
认证与 MFA 完整 LDAP/AD、Kerberos、X.509、TOTP、FIDO2、YubiKey 全覆盖
服务治理能力 服务注册表、属性释放、审计能力,天然满足合规要求
委托认证 既能当 IdP,也能当身份代理,支持多 IdP 统一入口
工程化成熟 WAR Overlay 构建,自定义代码与上游隔离,升级成本低

对于正在做 JDK 25、Spring Boot 4.1 升级的团队,CAS 8.0.1 是一个值得认真评估的选择。它证明了一件事:活得久不等于过时,能把复杂问题沉淀成配置项的工具,才是真正的平台。

相关推荐
weixin_307779131 小时前
基于睿擎工业开发平台的预训练视觉模型轻量化适配与低代码部署优化
开发语言·算法
实心儿儿1 小时前
Qt — Qt 多线程
开发语言·qt
牧瀬クリスだ1 小时前
Spring统一功能处理
java·spring boot·spring·状态模式
SL_staff1 小时前
从钉钉日报到动态数据看板:面向业务侧的低代码BI实践路径
java·数据分析·数据可视化
TDengine (老段)1 小时前
TDengine TSDB 实战排障四(升级与兼容)
android·java·大数据·数据库·物联网·时序数据库·tdengine
nhdh1 小时前
SpringAI与SpringAIAlibaba:标准与生态的完美互补
java·人工智能·spring
小小龙学IT2 小时前
Go 泛型(Generics)深度解析:从类型参数到生产实践
开发语言·数据库·golang
hold?fish:palm2 小时前
45 二叉树的右视图
开发语言·c++·算法
MI_farmer2 小时前
Anaconda 安装在 D 盘但虚拟环境跑到 C 盘,以及 Conda PermissionError: WinError 5 的解决方法
c语言·开发语言·conda