Bootstrap

CAS5.3服务器搭建及SpringBoot整合CAS解决分布式系统安全

单点登录概念

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

当我们使用SpringCloud搭建分布式系统后,这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决

SSO单点登录主要流程步骤

  1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
  2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
  3. 用户认证:用户身份认证。
  4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
  5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
  6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

搭建CAS5.3单点登录服务器

1. 源码下载打包
  • 首先到官方的gihub上下载cas,注意最新的master分支使用的需要java11,该分支使用Gradle工程 下载地址
  • 解压后使用maven命令打包:mvn package
  • 把target下生成的war包重命名为cas.war并解压
2.配置文件修改
  • 由于CAS默认使用的是基于https协议,需要改为兼容使用http协议,到tomcat\webapps\cas\WEB-INF\classes目录的application,properties添加如下的内容
	cas.tgc.secure=false
	cas.serviceRegistry.initFromJson=true
  • 到\cas\WEB-INF\classes\services目录下的HTTPSandIMAPS-10000001.json,修改内容"serviceId" : "^(https|http|imaps)://.*",即添加http,兼容http修改完毕。
  • 由于https协议默认使用的端口为8443,我们修改为tomcat的8080端口
    到tomcat\webapps\cas\WEB-INF\classes目录的application,properties添加如下的内容server.port=8080
  • 由于使用的静态密码为casuser::Mellon不好记忆, 到tomcat\webapps\cas\WEB-INF\classes目录的application,properties的最后面修改密码为如下cas.authn.accept.users=admin::admin
  • CAS服务器搭建完毕,重启tomcat

搭建springboot项目的客户端

  1. 在新建的springboot项目的pom.xml添加如下依赖
<!-- https://mvnrepository.com/artifact/net.unicon.cas/cas-client-autoconfig-support -->
        <dependency>
            <groupId>net.unicon.cas</groupId>
            <artifactId>cas-client-autoconfig-support</artifactId>
            <version>1.7.0-GA</version>
        </dependency>
  1. 在application.yml添加如下配置,配置内容意思很简单,配置内容的原理上面也说到,当访问分布式系统的资源时,会检验有没有ticket,没有ticket的话会跳转到登录界面,登录成功后要跳转回来当前访问的资源
cas:
  server-url-prefix: http://localhost:8080/cas
  server-login-url: http://localhost:8080/cas/login
  client-host-url: http://localhost:9100
  validation-type: cas
server:
  port: 9100
  1. 启动类上添加CAS注解 @EnableCasClient
@EnableCasClient
@SpringBootApplication
public class CasStarterApplication {
    public static void main(String[] args) {
        SpringApplication.run(CasStarterApplication.class, args);
    }
}
  1. 接下来写一个rest接口测试
@RestController
public class TestController {
    @GetMapping("/test")
    public String get(){
        return "test success";
    }
}
  1. 访问localhost:9100/test,由于没有登录将会跳转到登录界面
    CAS默认登录界面
  2. 输入用户密码admin:admin 就跳转到当前访问的资源

后面再更新文章阐述使用数据库代替静态的用户密码,和修改登录界面

;