2

背景

在多服务统一帐号的应用集中,单点登录是必不可少的。CAS就是成熟的单点登录框架之一。Github地址 https://github.com/apereo/cas。现在我们就通过一系列快速简单的构建方式实现一个简单的单点登录系统集。
CAS架构

第一步:快速构建自己的CAS Server

apereo提供了一个基于层结构的框架,可以帮助开发者快速引入cas server的代码,然后实现自由配置或代码覆盖,打包方式也非常简单。Github地址https://github.com/apereo/cas...

  1. 下载或者克隆cas-overlay-template项目到本地,用Intellji Idea打开项目,然后添加当前项目为maven项目。执行Maven命令mvn install。执行时间较长,需耐心等待。执行结束后,该项目中会出现overlays目录,里面就是cas server的配置文件和class代码。
  2. mvn install执行后会在项目的target目录下生成一个cas.war包,将该war包放在apache tomcat的webapps/目录下并启动tomcat后,就能通过浏览器访问,访问地址 localhost:8080/cas
  3. 修改默认配置的方式:

    • 在项目中添加src/main/javasrc/main/resources目录,并将src/main/java设置为代码文件根目录,将src/main/resources设置为资源文件根目录。例如要修改默认的登录用户名和密码(默认为casuser/Mellon),只需要将overlays目录下的WEB-INF/classes/目录中的application.properties文件复制到src/main/resources中,并修改最后一行配置cas.authn.accept.users=casuser::Melloncas.authn.accept.users=test::demo即可,让后重新执行mvn install并重新部署target/cas.war包即可验证。
    • overlays中的WEB-INF/classes/目录下的所有文件均可被覆盖,只需要将该目录下的文件复制到src/main/resources中,然后修改后重新打包部署,即可。
  4. CAS5.X默认的登录帐号是在application.properties中配置的(casuser::Mellon),正式环境下需要通过连接数据库进行校验,添加数据库验证的教程 https://apereo.github.io/2017...

第二步:客户端集成CAS

集成CAS客户端实际上是为应用添加多个Filter。以SpringBoot的应用为例,可以采用自动注解的方式添加过滤器。这里我们使用了cas-client-autoconfig-support项目的集成能力,Github地址https://github.com/Unicon/cas...

  1. 在SpringBoot应用的Maven配置文件(pom.xml)中添加依赖:

    <dependency>
      <groupId>net.unicon.cas</groupId>
      <artifactId>cas-client-autoconfig-support</artifactId>
      <version>1.5.0-GA</version>
    </dependency>
  2. 在应用启动入口类上添加配置@EnableCasClient,示例:

    @SpringBootApplication
    @EnableCasClient
    public class MyApplication { .. }
  3. 在应用的配置文件中(application.properties)添加如下配置:

    cas.server-url-prefix=https://casserver.com/cas # 填CAS服务器的前缀
    cas.server-login-url=https://casserver.com/cas/login # 填CAS服务器的登录地址
    cas.client-host-url=https://casclient.com # 填客户端的访问前缀
  4. 访问应用时就会首先跳转到cas服务器的登录地址。

FQA

HTTP服务对接CAS时登录后报未认证授权的服务
未授权

解决办法: 服务端开启http,默认只开始https和imaps。参考 http://blog.csdn.net/leftfist...

操作步骤(1): 修改services\HTTPSandIMAPS-10000001.json文件

"serviceId" : "^(https|imaps)://.*" 
改为==>
"serviceId" : "^(https|http|imaps)://.*",

操作步骤(2): 在application.properties文件中添加:

cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true #这一点真是太重要了!!!!!!!!

多应用注销时会有一个注销失败

解决办法: 配置客户端的参数:useSessionfalse,即不开启session持久。参数配置参考https://github.com/apereo/jav...。示例:

  @EnableCasClient
   public class Application extends CasClientConfigurerAdapter {
   
     public static void main(String[] args) throws Exception {
       SpringApplication.run(Application.class, args);
     }
   
     @Override
     public void configureValidationFilter(FilterRegistrationBean validationFilter) {
       validationFilter.getInitParameters().put("useSession", "false");
     }
   }

luodongseu
65 声望6 粉丝

全栈工程师