1.什么是CASCAS全称是CentralAuthenticationService,英文是CentralAuthenticationService。这是耶鲁大学发起的一个开源项目,旨在帮助Web应用系统构建可靠的单点登录解决方案。从目前的实际企业项目来看,CAS仍然是一种非常流行的单点登录方案。1.1CAS架构CAS分为两部分:一是CASServer,是单点认证服务,类似于我们OAuth2+JWT方案中的授权服务器,用来验证用户名/密码等,一般来说,它是独立部署的。另一个是CASClient,一个一个的相当于一个(微)服务。我们来看一张CAS官方给出的架构图:可以看出用户访问CASClients,CASClients和CASServer之间的通信支持多种协议,CASServer处理具体的认证事务,CASServer处理数据源的支持也是非常多样化。CASClient支持的平台有:ApachehttpdServer(mod_auth_casmodule)Java(JavaCASClient).NET(.NETCASClient)PHP(phpCAS)Perl(PerlCAS)Python(pycas)Ruby(rubycas-client)支持的通信CASProtocols包括:CAS(versions1,2,and3)SAML1.1and2OpenIDConnectOpenIDOAuth2.0WSFederation从图中也可以看出CAS支持多种不同的认证机制,具体来说:JAASLDAPRDBMSSPNEGO。..1.2三个概念在CAS的整个登录过程中,有三个重要的概念。这里我先给大家解释一下。TGT:TGT的全称是TicketGrantingTicket,相当于我们平时看到的HttpSession的功能。用户登录成功后,这里会存储用户的基本信息,如用户名、登录有效期等信息。TGC:TGC的全称是TicketGrantingCookie。TGC以Cookie的形式存储在浏览器中。根据TGC可以帮助用户找到对应的TGT,所以这个TGC有点类似于sessionID。ST:ST的全称是ServiceTicket,是CASSever通过TGT向用户签发的票据。当用户访问其他服务,发现没有cookie或ST时,会302到CASServer获取ST,然后携带ST302返回时,CASClient会去CASServer获取用户的登录状态通过ST。2、CAS登录流程接下来我们用一张官方流程图来看看CAS登录流程是怎样的吧!这个图其实比较清楚,我给大家解释一下:术语:应用1,应用2分别代表受保护的应用。用户通过浏览器访问应用程序1。应用1发现用户没有登录,于是返回302,带一个服务参数让用户登录CAS服务器。浏览器自动重定向到CASServer,CASServer获取用户Cookie中携带的TGC,验证用户是否登录,如果登录则完成身份验证(此时CASServer可以找到TGT基于用户的TGC,然后获取用户的信息);如果没有登录,重定向到CASServer登录页面,用户输入用户名/密码,CASServer会生成一个TGT,并根据TGT下发一个ST,然后将TGC放入用户的Cookie中完成身份验证。CAS服务器完成身份验证后,会将ST拼接到服务中并返回302,浏览器会先将TGC存入cookie中,然后根据302指令重定向到带有ST的应用1。应用程序1从浏览器收到ST后,它检查CAS服务器以确定用户的登录状态。如果用户登录合法,CAS服务器会将用户信息返回给应用1,浏览器再访问应用2,应用2发现用户未登录,重定向到CASServer。CASServer发现用户此时确实已经登录,于是重定向回应用2,同时携带ST。应用2带着ST在CAS服务器上进行验证,得到用户的登录信息。在整个登录过程中,浏览器分别与CASServer、应用1、应用2建立会话。其中,与CASServer建立的会话称为全局会话,与应用程序1和2建立的会话称为本地会话。;一旦本地会话建立成功,用户以后就不会再通过CAS服务器访问应用1和应用2了。3、CASServer搭建说了这么多,下面说说。既然整个CAS单点登录还是比较麻烦,那我们就一步步来吧。今天先教大家如何架设CAS服务器。3.1版本,最新的CASServer是6.x,是基于gradle搭建的。考虑到很多小伙伴可能对gradle操作不熟悉,这里我选择5.3版本,它是基于熟悉的maven构建的。官网在https://github.com/apereo/cas-overlay-template为我们提供了搭建CASServer的模板。我们在branch:选择5.3版本下载或者直接clone,然后切换到5.3分支。这个应该不用我教了,相信小伙伴们自己就能搞定。3.2HTTPS证书CASServer从4版本开始使用HTTPS通信,所以我们要提前准备好HTTPS证书。公司内的项目需要购买HTTPS证书。如果自己玩,也可以向云服务商申请免费的HTTPS证书。现在我们在本地测试,使用JDK自带的keytool工具自行生成HTTPS证书即可。生成命令如下:keytool-genkey-aliascasserver-keyalgRSA-keystore./keystore-alias表示生成证书的别名-keyalg表示生成证书使用的算法-keystore表示生成证书的存放位置当certificate执行的时候,需要给一个key数据库密码,随便给,但是要记住给多少。此外,在您的名字和姓氏是什么?选项,需要填写CASServer的域名。请记住:在此之后,我们将拥有一个HTTPS证书。虽然这个证书不被各大厂商认可,但是大家自己实践一下就够了。3.3配置并开始下一步配置。在下载的cas-overlay-template工程中,我们新建src/main/resources目录,添加overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.14/WEB-INF/classes/application。复制properties文件和新生成的keystore文件:然后修改application.properties,主要配置keystore的位置和key,如下:server.ssl.key-store=classpath:keystoreserver.ssl.key-store-password=111111server.ssl.key-password=111111配置完成后,在项目根目录下执行以下命令启动项目:./build.shbootrun视个人网速而定,第一次启动可能需要一个时间长了,耐心等待吧。在启动过程中,也可能会报错,不过不用担心,如果看到就绪图标,就说明启动成功了:3.4测试启动成功后,进入https://cas.javaboy。org:8443/cas/login在浏览器中可以进入登录页面(注意是https):默认用户名为casuser,密码为Mellon。输入用户名和密码进行登录。默认用户名/密码也可以在application.properties文件中修改。文件最后一行:cas.authn.accept.users=casuser::Mellon修改后重启项目生效。4.小结今天和小伙伴们聊聊CAS的基本概念,然后搭建一个CASServer。有兴趣的朋友可以试试看。在下一篇文章中,我们将看到如何使用SpringBoot开发CAS客户端。完~本文转载自微信公众号“江南的一场小雨”,可以通过以下二维码关注。转载本文请联系江南一点鱼公众号。