只需30行代码让你的应用快速完成CAS集成,而不对原应用大量改造

deer332025-07-23技术文章32

一、项目背景

虽然现在CAS中央认证服务用的越来越少,但是有些企业还是保留了这一认证。我们最近新开发一个应用系统,就需要与其进行集成,按照之前的集成方式需要从底层进行改造工作量具体。我方做的是一个c#开发基于.net4.5的web网站BPM业务流程系统(后面统一简称为BPM),部署到Windows的IIS下。客户方有多个独立的应用系统,如OA系统、邮箱系统、智能印章等系统,其已经部署了统一的CAS认证服务器(这里是重点,本次方案我们重点介绍应用系统如何进行集成,默认CAS服务器端是已经搭建完毕的,如果想学习CAS服务器端如何大家,大家可以网上搜索,资料很多,这里说明下不要误导大家了),这些系统通过CAS统一认证系统解决了多系统多次登录问题。现在需要我们新做的这个项目也接入其CAS认证系统。

二、遇到的问题

按照以前项目集成惯例,以及结合网上CAS一些集成案例,如果要实现集成需要从底层修改我们现在的逻辑,改造工作量很大,需要对每个工程都进行改造,另外就是改造后测试工作量也很多。关于CAS的详细原理和普通方式的集成说明在这里就不再重复说明,网上资料很多,随便一搜都可以查到。这里我要说的是如何用30行代码完成整个项目的快速集成。

三、简要介绍下实现原理以及要解决的二个场景

(一)实现原理

  1. 因CAS-服务器端是已经搭建完毕,且正常运行的,本次方案只针对BPM应用端如何集成做介绍。
  2. 保留BPM应用内部用户信息存储和验证方式不变,保留原form认证。
  3. 主要实现逻辑为在登录BPM系统时,首先与CAS认证服务器做用交互,确认当前环境CAS认证是否已经通过。如果CAS认证已经通过,则通过CAS服务器的相关接口获取到当前用户,如果没有认证过CAS则直接跳转到CAS的登录页。

(二)要解决的二个场景

  1. BPM系统与CAS单独认证,即一个CAS客户端如何直接与CAS服务器端进行认证。
  2. BPM系统与OA系统(客户多个系统中的一个)同时与CAS认证,即多个CAS客户端如何与CAS服务器进行认证。

四、具体解决方案

BPM与CAS认证的核心是ticket生成以及如何根据ticket获取对应的用户信息,只要明白了以上两点,即可很快明白CAS认证的基本原理。其他票据只做简单理解即可。

· Ticket如何生成的?

Ticket是用户终端请求CAS-Server端登录成功后(步骤5方式)或TGC验证通过后(步骤6方式)由CAS-Server生成的。

· 如何根据Ticket获取对应的用户信息?

需要带上票据Ticket和客户端地址service,去访问CAS-Server的serviceValidate接口进行数据获取,完整请求示例为:

https://XXXXXXX/cas/serviceValidate?ticket=STSx6eyvj7cPPCfn0pMZ&service=https://XXXX/iPortal/Login.aspx

获取到返回数据后,返回数据格式为XML,解析其中的user节点,即为用户账号。

五、项目实战代码

如果以上逻辑看起来对你来说还是有点复杂,那么直接上实战代码,看起来可能更简单。现在的代码是基于C#开发的,如果你的项目是java或者其他项目,参考逻辑改为你的代码即可,实际代码可能不足30行。即在你原来项目登录入口的页面后台增加以下方法即可,其他完全不需要做任何修改

五、总结

这种与CAS认证集成的方式非常简单,从安全层面也满足要求,同时不需要对本身系统做其他改造。如果有任何问题或者是需要源码的欢迎留言交流。后续我会分享更多有应用价值的项目实战案例,都是在实际项目中总结出来的。