cas中央认证服务器的简单使用

 

企业级单点登录解决方案 :本文记录的是cas5.3的使用


摘要:

1、开源的企业级单点登录解决方案。

2、CAS Server 为需要独立部署的 Web 应用。

3、CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

4、CAS属于Apache 2.0许可证,允许代码修改,再发布(作为开源或商业软件)

从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。下图为 CAS 最基本的协议过程

技术文档:https://apereo.github.io/cas/5.1.x/

1.https://github.com/apereo/cas-overlay-template/tree/5.3   下载cas服务器

2.idea导入maven项目,该项目是springboot的,已经打包成war,或者根据readme提示进行操作。

idea导入maven项目,该项目是springboot的,已经打包成war,或者根据readme提示进行操作。
   操作步骤:进入项目目录:运行:
   我们的运行使用cas提供的脚本

         初始化命令:build.cmd init
         打包命令 :build.cmd package
         启动命令:build.cmd run
         清理target目录文件命令:build.cmd clean

 

特别注意:需要导入maven项目:生成项目结构目录如下:

 

或者之前的步骤可以不用,导入maven项目直接install编译项目:

登录:

输入:用户名:casuser   密码:Mellon 登录cas主页

即可登录项目主页:

 

 overlay技术:覆盖相同结构目录的文件内容:由于cas使用了该技术,我们可以直接用,不用过多了解:

下面新建类文件resources:生成的就是classes内的文件;

services里是注册信息,客户端可访问的设置:允许所有的localhost通过:不多做解释。

{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "serviceId": "^(http)://localhost.*",
  "name": "本地服务",
  "id": 10000003,
  "description": "这是一个本地允许的服务,通过localhost访问都允许通过",
  "evaluationOrder": 1
}

application.properties就是springboot的配置文件,里面有服务端需要的配置参数信息:初始的账户密码就在里面;

这样,整个cas服务器初始阶段就搭好了!

下面开始搭建客户端client01

单点登录的客户端主要配置web.xml,其中过滤器的配置很重要:不懂过滤器的小伙伴请自行百度servlet的过滤器。

需要客户端的jar包:mvc的其他包就不贴了。

    <!-- https://mvnrepository.com/artifact/org.jasig.cas.client/cas-client-core -->
    <dependency>
      <groupId>org.jasig.cas.client</groupId>
      <artifactId>cas-client-core</artifactId>
      <version>3.4.1</version>
    </dependency>
<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--单点登出过滤器-->
  <filter>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    <init-param>
      <param-name>casServerUrlPrefix</param-name>
      <param-value>http://localhost:8080/cas</param-value>
    </init-param>
  </filter>
  <!--用来跳转登录-->
  <filter>
    <filter-name>CAS Authentication Filter</filter-name>
    <!--<filter-class>org.jasig.cas.client.authentication.Saml11AuthenticationFilter</filter-class>-->
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
      <param-name>casServerLoginUrl</param-name>
      <param-value>http://localhost:8080/cas/login</param-value>
    </init-param>
    <init-param>
      <param-name>serverName</param-name>
      <!--这是客户端的部署地址,认证时会带着这个地址,认证成功后会跳转到这个地址-->
<!--      <param-value>http://localhost:8181/node1</param-value>-->
      <param-value>http://localhost:8080/client01/toIndex</param-value>

    </init-param>
  </filter>

  <!--Ticket校验过滤器-->
  <filter>
    <filter-name>CAS Validation Filter</filter-name>
    <!--<filter-class>org.jasig.cas.client.validation.Saml11TicketValidationFilter</filter-class>-->
    <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
    <init-param>
      <param-name>casServerUrlPrefix</param-name>
      <param-value>http://localhost:8080/cas</param-value>
    </init-param>
    <init-param>
      <param-name>serverName</param-name>
<!--      <param-value>http://localhost:8181/node1</param-value>-->
      <param-value>http://localhost:8080/client01/toIndex</param-value>
    </init-param>
    <init-param>
      <param-name>redirectAfterValidation</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>useSession</param-name>
      <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>authn_method</param-name>
      <param-value>mfa-duo</param-value>
    </init-param>
  </filter>

  <!-- 该过滤器负责实现HttpServletRequest请求的包裹,比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置-->
  <filter>
    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
    <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
  </filter>

  <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()-->
  <!--<filter>
      <filter-name>CASAssertion Thread LocalFilter</filter-name>
      <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>CASAssertion Thread LocalFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>-->

  <filter-mapping>
    <filter-name>CAS Single Sign Out Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>CAS Validation Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>CAS Authentication Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <listener>
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
  </listener>



  <servlet>
    <servlet-name>DispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  <servlet-name>DispatcherServlet</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

  <welcome-file-list>
    <welcome-file>
      toIndex
    </welcome-file>
  </welcome-file-list>

</web-app>

同时部署cas服务和client01服务:

 访问client01自动跳转到cas服务器登录页面

登出:先访问本地登出,清空session信息,再重定向到cas服务器清空信息

 重定向自己的首页就行了,系统会自动拦截又重定向到了cas服务的登录页面了。

但是这样子是不起作用的:提醒:重定向网络页面需要加入注册才可以哦。

需要:在application.properties中加入这句话

#允许用户自定义退出路径
cas.logout.followServiceRedirects=true

到此,简单的客户端demo就此完成了。

 

 

连接数据库:

      cas使用jdbc连接数据库:

1.pom中添加相应的jar包

        <!--cas数据库相关的一些jar包-->
                <!--数据库认证相关 start-->
                <dependency>
                    <groupId>org.apereo.cas</groupId>
                    <artifactId>cas-server-support-jdbc-drivers</artifactId>
                    <version>${cas.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.apereo.cas</groupId>
                    <artifactId>cas-server-support-jdbc</artifactId>
                    <version>${cas.version}</version>
                </dependency>

                <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.26</version>
                </dependency>

2.application.properties 添加连接数据库以及查询的配置信息

##
# CAS Authentication Credentials
#数据库认证
#cas.authn.accept.users=a::a
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/mytest1?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=131412
cas.authn.jdbc.query[0].sql=select * from user where username=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

输入用户名密码即登录成功!本文只做简单的demo样例,加密类似的操作暂不处理。

至此,cas连接数据库实现登录登出的操作就此完成!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值