Apereo CAS实现单点登录(sso)

1,590 阅读4分钟

一什么是单点登录(sso)

用户一次登录可以访问所有互相信任的应用系统

传统的session无法在系统分别部署到不同的服务器中使用

二什么是CAS

是实现SSO单点登录的框架 [点击进入官网:](CAS | Apereo)

特点

  1. 开源企业级单点登录解决方案
  2. CAS Service(CAS服务端): 是需要独立部署的Web应用
  3. CAS Client(CAS客户端): 支持非常多的客户端(java,PHP...)

三CAS Server

前置准备 jdk,tomcat的安装和环境变量的配置

3.1下载与部署cas的war包

链接:pan.baidu.com/s/1VZcNEpNm… 提取码:6nzn 下载cas.war后将其放入到tomcat的安装目录中的 apache-tomcat-8.5.72\webapps文件夹下:

image.png

3.2启动tomcat查看cas Server是否安装成功

进入tomcat的安装目录中bin文件夹下 Windows系统双击 startup.bat

image.png

自动弹出黑窗口:

image.png 第一次加载有的小伙伴可能加载的慢一些

注意不要对黑窗口 敲击回车 否则会暂停窗口

出现READY表示加载完成

image.png

浏览器输入 http://localhost:8080/cas/login

image.png

回到tomcat的安装目录下进入webapps文件夹中,我们发现多了个cas文件夹

image.png

进入tomcat的安装目录中webapps\cas\WEB-INF\classes 打开application.properties文件

image.png

在最后一行找到我们需要的用户名和密码

casuser :: Mellon

注意复制不要有空格 image.png

回到浏览器登陆成功!

image.png

CAS Server部署成功!

3.3CAS Server其它功能演示

在tomcat的安装目录中webapps\cas\WEB-INF\classes\webflow中有loginlogout文件夹

image.png 我们大胆猜测 logout文件夹是管理登出功能的 浏览器输入 http://localhost:8080/cas/logout

image.png

回过头来看webapps\cas\WEB-INF\classes\application.properties文件

image.png

四CAS 客户端

点击下载我的源码 gitee.com/zhang-zhiwe…

这里是 SpringBoot2+SpringSecurity+CAS 安全认证整合项目

启动后访问http://localhost:7200/

发现浏览器自动跳转到

http://127.0.0.1:8080/cas/login?service=http%3A%2F%2Flocalhost%3A7200%2Flogin

但是报了个错误

image.png

解决方法:

在tomcat的安装目录中cas\WEB-INF\classes\application.properties添加如下

cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

重启CAS服务端和客户端


发现报出如下错误

image.png

解决方法

cas服务4后服务端默认是https协议的配置文件,

而我们浏览器是http的需要修改它

路径cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json

        {
          "@class" : "org.apereo.cas.services.RegexRegisteredService",
          // "serviceId" : "^(https|imaps)://.*",
          "serviceId" : "^(https|http|imaps)://.*",
          "name" : "HTTPS and IMAPS",
          "id" : 10000001,
          "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
          "evaluationOrder" : 10000
        }       

重启CAS服务端和客户端


image.png

输入用户名密码 用户名 casuser 密码 Mellon

image.png


输入http://localhost:7200/hello

image.png


登出http://localhost:7200/logout

image.png

五CAS 认证流程

五CAS 认证流程

在开始前先了解几个名词

user用户

Browser浏览器

CAS Server 服务器

Protected App 应用1

Protected App 应用2

TGC 存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,是CAS Server用来明确用户身份的凭证。TGT封装了TGC值以及此Cookie值对应的用户信息.

TGT:TGT对象的ID就是TGC的值,在服务器端,通过TGC查询TGT。

ST:service ticket,CAS为用户签发的访问某一service的票据,ST是TGT签发的。

image.png

解释一下这张官网流程图

  1. 用户通过浏览器访问应用1, 应用1发现用户未登录,返回302,并携带上一个service参数,让用户到CAS Server上登录

  2. 浏览器自动重定向到CAS Server上, CAS Server获取用户Cookie中携带的TGC,去校验用户是否登录 如果已经登录,则完成身份验证(此时CAS Server可以根据用户的TGC找TGT,进而获取用户信息)

如果未登录,则重定向到CAS Server的登录页面,用户输入用户名/密码,,CAS Server生成TGT,根据TGT签发一个ST,将TGC放在用户的cookie中,完成身份校验

  1. CAS Server 完成身份校验之后,会将 ST 拼接在 service 中,返回 302,浏览器将首先将 TGC 存在 Cookie 中,然后根据 302 的指示,携带上 ST 重定向到应用1。
  2. 应用1 收到浏览器传来的 ST 之后,拿去 CAS Server 上校验,去判断用户的登录状态,如果用户登录合法,CAS Server 就会返回用户信息给 应用1。
  3. 浏览器再去访问应用2,应用2 发现用户未登录,重定向到 CAS Server。
  4. CAS Server 发现此时用户实际上已经登录了,于是又重定向回应用2,同时携带上 ST。
  5. 应用2 拿着 ST 去 CAS Server 上校验,获取用户的登录信息