当前位置:网站首页 > 技术博客 > 正文

cas单点登录和sso



最近新参与的项目用到了cas单点登录,我还不会,这怎么能容忍!空了学习并搭建了一个spring-boot 集成CAS 的demo。实现了单点登录与登出。

单点登录英文全称是:Single Sign On,简称SSO。 含义:在多个相互信任的系统中,只要登录一个系统其他系统均可访问。

是一种使用广泛的单点登录实现,分为客户端CAS Client和服务端 CAS Service,客户端就是我们的系统,服务端是认证中心,由CAS提供,我们需要稍作修改,启动起来就可以用。~~~~

CAS Service 需要用https的方式,那么就需要证书,可以买也可以自己生成一个。 其实这一步也可以省略,访问的时候使用http即可,只是cas 会给警告。

步骤和把大象装进冰箱一样简单,总共三步:

1. 生成密钥

keytool -genkey -alias cainiao -keyalg RSA -keystore E:sslcainiao.keystore

参数说明:

在执行中会问你很多问题,当问到 :您的名字与姓氏是什么? 此时需要填写域名,作为之后的访问地址,其他随意。 执行完后生成一个密钥文件 cainiao.keystore

2. 生成证书

keytool -export -alias cainiao -storepass -file E:/ssl/cainiao.cer -keystore E:/ssl/cainiao.keystore

参数说明:

执行完后目录下会生成一个cainiao.cer证书

3. 导入证书

keytool -import -alias cainiao -keystore C:/"Program Files"/Java/jdk1.8.0_181/jre/lib/security/cacerts -file E:/ssl/cainiao.cer -trustcacerts

将证书导入到JDK信任库 把原来的$JAVA_HOME/jre/lib/security/cacerts文件要先删掉,否则会报出.

下面是整个过程:

最后,hosts 配置

需要从github上拉取模板 5.3之后的都是gradle项目,5.3以之前都是maven 项目,我下载5.3版本的。

1.> 把pom 里面的<repositories>仓库地址去掉,国外的仓库地址比较慢。你懂得。 2.> 在根目录下建/src/main/resources目录 3.> 将生成的密钥文件复制到/src/main/resources目录下 4.> 将overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.14/WEB-INF/classes/application.properties文件复制到第二步建的目录下。 5.> 修改复制过来的/src/main/resources/application.properties文件,根据上面的证书信息如实填写。

6.> 连接mysql数据库,在pom 中添加依赖

或许你会发现有个xmlsectool-2.0.0.jar包下不下来,需要到maven中央仓库下载,后安装到本地仓库,可不是直接放到本地仓库,jar包都是必须使用命令安装到本地仓库。

mvn install:install-file -Dfile="E:下载xmlsectool-2.0.0.jar" "-DgroupId=net.shibboleth.tool" "-DartifactId=xmlsectool" "-Dversion=2.0.0" "-Dpackaging=jar"

7.> 在复制过来的/src/main/resources/application.properties文件中在添加如下信息

附上数据库sql,用户信息表

用户名和密码一样,密码在数据库中是MD5加密的。 这样就完成了CAS service 的搭建,在根目录使用 命令启动 出现 READY 的branner就启动好了 访问地址 :8443/cas/login

mashu正常登录,cainiao需要修改密码,admin被禁用,符合预期。

创建一个spring boot 项目. 1.加入 的依赖, 我选择目前最新的 2.3.0-GA 版本

2.在启动类上加上注解 3.在application.properties中添加配置

4.添加hosts 配置,把客户端的访问地址配置到hosts

这样就客户端就配置好了。

我写一个controller,访问一下。

访问 :8080/hello

未认证授权的服务

喜提报错:

原因是服务端不允许客户端的http协议的请求。需要对服务端做以下修改,让他妥协。 1.>修改overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.14/WEB-INF/classes/services/HTTPSandIMAPS-.json文件

2.>在application.properties文件中添加:

再次访问 :8080/hello,可以看到已经带着地址转发到服务端的登录页。

输入账号密码mashu/mashu,登录成功后又回来了!哈哈哈哈嗝,并携带了登录凭证。

多系统登录

再启动一个客户端,打开idea 的edit configurations设置。勾选 Allow parallel run

修改application.properties,服务的端口等信息,再点击启动,就可以同时启动了(8081/8080)两个客户端

访问第二个客户端 :8081/hello,(需要先配置host),就直接登录了,到此完成了单点登录。

添加两个配置文件;

1. CasProperties.java

2. Configs.java

登出地址: :8443/cas/logout,退出服务端。 再次访问客户端发现自动跳到了登录页面,即客户端也自动退出成功。

最开始我想把客户端也加一个证书,用https访问。免得在服务端做修改去支持http, 当我添加证书后,单点登录正常,但是登出功能总是失败,表现为服务端退出,客户端没有退出。 我一直以为客户端配置的登出有问题,搞了半天都没成功,后来我把客户端的证书去掉,就成功了。想了想大概是因为我们自己生成的证书不能被服务端认可,因为登出的时候需要服务端向客户端发起广播,而我们之前修改的文件只是作用于客户端向服务端的请求。和登出相反。

在我使用springboot配置证书的时候,2.1.0.RELEASE以上版本的spring-boot-starter-parent都不行。会报错。

  • 上一篇: linux监控软件
  • 下一篇: ev3编程指南
  • 版权声明


    相关文章:

  • linux监控软件2025-06-28 11:01:05
  • linux安装nginx详细教程2025-06-28 11:01:05
  • 无畏契约游戏简介2025-06-28 11:01:05
  • c++ 成员函数指针2025-06-28 11:01:05
  • redis缓存一般存些什么数据2025-06-28 11:01:05
  • ev3编程指南2025-06-28 11:01:05
  • 服务器基础知识全解(终极版)2025-06-28 11:01:05
  • devc++安装步骤2025-06-28 11:01:05
  • django2.22025-06-28 11:01:05
  • oracle序列nextval2025-06-28 11:01:05