• CAS FOR WINDOW ACTIVE DIRECTORY SSO单点登录


    一、CAS是什么?

      CAS(Central Authentication Service)是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(支持WEB及客户端)。

    CAS 开始于 2001 年, 并在 2004 年 12 月正式成为 JA-SIG 的一个项目。

    二、主要特性

       1、开源的、多协议的 SSO 解决方案; Protocols : Custom Protocol 、 CAS 、 OAuth 、 OpenID 、 RESTful API 、 SAML1.1 、 SAML2.0 等。

       2、支持多种认证机制: Active Directory 、 JAAS 、 JDBC 、 LDAP 、 X.509 Certificates等;

       3、安全策略:使用票据( Ticket )来实现支持的认证协议;

       4、支持授权:可以决定哪些服务可以请求和验证服务票据( Service Ticket );

       5、提供高可用性:通过把认证过的状态数据存储在 TicketRegistry 组件中,这些组件有很多支持分布式环境的实现,                   如: BerkleyDB 、 Default 、 EhcacheTicketRegistry 、 JDBCTicketRegistry 、 JBOSS TreeCache 、 JpaTicketRegistry 、 MemcacheTicketRegistry 等;

         6、支持多种客户端: Java 、 .Net 、 PHP 、 Perl 、 Apache, uPortal 等。

    三、CAS原理

      关于原理网上已有很多资料。如:http://www.cnblogs.com/shanyou/archive/2009/07/14/1523671.html

    本次博文主要讲解CAS如何与WINDOWS的ACTIVE DIRECTORY进行结合。因为网上大部分的资料都是与LDAP整合,而ACTIVE DIRECTORY也是基于LDAP协议的。

      1、运行环境:

        window 8.1 + tomcat 8.0.30 + JDK 1.8 + CAS SERVER 4.0 +CAS Java Client + CAS .NET Client(包含example)

      2、部署:

      • 将tomcat复制为三份,分别为tomcat-cas,tomcat-app1,tomcat-app2

        (本次tomcat-server没用使用https的方式,如何将https修改成http请自行网上搜索。另https的配置需要证书,通过java的keytools工具进行生成或购买的证书。)

      • 修改各tomcat端口号(tomcat-cas保持原始端口号)

          tomcat-app1:

          

         

        

        tomcat-app2:

        

      • 将Cas Server 4.0 RELEASE解压,在module中cas-server-webapp.war复制到tomcat-server webapps目录下。

        

      • 建立Java Web工程,将Cas Java Client工程引用(当然可以通过Maven的方式)。

        

      • 配置Cas Client web.xml

        

     <!-- ========================单点登录开始 ======================== -->
        <!--用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->
        <listener>
            <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
        </listener>
        <!--该过滤器用于实现单点登出功能,可选配置。 -->
        <filter>
            <filter-name>CASSingle Sign OutFilter</filter-name>
            <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>CASSingle Sign OutFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <filter>
            <filter-name>CASFilter</filter-name>
            <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:8081</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CASFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!--该过滤器负责对Ticket的校验工作,必须启用它 -->
        <filter>
            <filter-name>CASValidationFilter</filter-name>
            <filter-class>
                org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
            </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:8081</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CASValidationFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->
        <filter>
            <filter-name>CASHttpServletRequest WrapperFilter</filter-name>
            <filter-class>
                org.jasig.cas.client.util.HttpServletRequestWrapperFilter
            </filter-class>
        </filter>
        <filter-mapping>
            <filter-name>CASHttpServletRequest WrapperFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- 该过滤器使得开发者可以通过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>
        <!-- ========================单点登录结束 ======================== -->
      • 发布Cas Java Client到tomcat-app1和tomcat-app2

         

      • 配置cas-server(可根据官网进行配置)

             找到cas-server下deployerConfigContext.xml。

           

    其中LADP相对应的配置值是通过cas.properties进行配置

    配置已结束。此次配置中用户登录主要是通过AD中的UPN进行匹配登录。

      • 运行各tomcat(通过tomcat下bin目录下startup命令,window是startup.bat。 linux或mac下使用startup.sh)
      • Cas .NET Client配置(ExampleWebSite工程下web.config)

      • 运行测试

    .NET Client运行未登录

    点击登录会自动跳转到cas-server登录页,进行登录:

    登录后会自动跳转到.NET CLIENT客户端,在客户端上并显示当前登录的信息。

    直接访问tomcat-app1和tomcat-app2,会自动登录并获取到当前的登录用户。

    点击任一系统中的注销(http://localhost:8080/cas/logout):

     再访问.Net Client,登录系统会自动被注销

  • 相关阅读:
    1."问吧APP"客户需求调查分析
    “软件工程”课程的学习目标
    范式
    知乎:有哪些让你相见恨晚的 PPT 制作技术或知识?
    前端指南
    在网页中JS函数自动执行常用三种方法
    index的用法
    搜索引擎的正确姿势
    display与visibility
    bootstrap之模态框
  • 原文地址:https://www.cnblogs.com/tom-zhu/p/5182306.html
Copyright © 2020-2023  润新知