CAS--单点登录解决方案简单介绍

CAS--单点登录解决方案简单介绍

2018年02月25日 21:58:59

阅读数:162

因为企业多用SOA架构,所以目前企业比较流行的企业业务整合方案显得尤为重要.下面对其解决方案之一------单点登录做一个探究.

A.单点登录(Single Sign On),简称SSO.

定义:在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.

同上述提到的问题一样,我们目前的系统大多存在于诸多的子系统中,而这些子系统分别部署在不同的服务器中,那么使用传统方式的Session是无法解决的,我们需要使用相关的单点登录技术来解决.

B.CAS介绍:

    Yale大学发起的一个开源项目.旨在为Web应用系统提供一种可靠的单点登录方法,在2014年12月正式成为JA-SIG的一个项目.

特点:

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

2.CAS Server 为需要独立部署的web应用

3.CAS Client支持非常多的客户端(其系统中的各个web应用),包括java,.Net,PHP,Perl,Apache,uPortal,Ruby等.

CAS包含两个部分: CAS Server 和CAS Client.  CAS Server需要独立部署,主要负责对用户的认证工作;CAS Client负责处理对客户端受保护资源的访问请求,需要登录时,重定向到CAS Server.

工作流程图:

1.访问服务:Web浏览器发送请求访问应用系统提供的服务资源

2.定向认证:SSO客户端会重定向用户请求到SSO服务器

3.用户认证:用户身份认证

4.发放票据:SSO服务器会产生一个随机的Service Ticket.

5.验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务.

6.传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端.

用户CAS单点登录全流程解释:我们通过浏览器访问CAS客户端(所谓客户端就是我们的应用,采用了CAS配置),首次登录没有票据(Service Ticket),客户端会重定向到CAS服务器,在浏览器显示登录页面,进行登录,登录后在服务器端进行认证,认证成功会带着发放的票据回到当前要登录的应用.再访问其他应用,就会去验证当前存储的票据是否为登录票据,如果是返回用户名一系列信息.

我们登录后CAS发放的票据是存放在cookie中的,这样当我们清除浏览器的缓存之后,就会把票据清除,没有票据后就要重新登录.

C.使用简介:

CAS服务端是一个war包,我们只需要放入tomcat目录下的webapps下.启动tomcat即可,自动解压.浏览器输入localhost:8080/cas/login可以看到CAS自带的登录界面

固定登录用户名和密码  casuser/Mellon

可以将tomcat修改为指定的端口xxxx

在tomcat目录 conf/server.xml

同时需要修改CAS的配置文件 找到cas文件下WEB-INF/cas.properties

server.name=http://localhost:xxxx

a.关于协议使用:

CAS默认使用的是HTTPS协议,如果使用HTTPS协议需要SSL安全证书(需要向特定的机构申请和购买).如果对安全要求不高或是在开发测试阶段,可以使用HTTP协议(不过目前谷歌已经逐渐去除HTTP化了,所以HTTP协议看来逐渐会变得只能在测试阶段使用使用了).我们可以通过配置,让CAS使用HTTP协议.

1.修改cas 目录 下的WEB-INF/deployerConfigContext.xml

找到如下配置

<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"

p:httpClient-ref="httpClient"/>

增加参数 p:requireSecure="false", requireSecure属性意思为是否需要安全验证,即HTTPS,false为不采用.

2. 修改cas的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml

如下配置:

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"

      p:cookieSecure="true"

      p:cookieMaxAge="-1"

      p:cookieName="CASTGC"

      p:cookiePath="/cas" />

参数p:cookieSecure="true",同为HTTPS验证相关,true为采用HTTPS验证,false为不采用.

参数p:cookieMaxAge="-1",是cookie的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其他窗口,仍然要求验证(这样就失去了使用CAS的本意).可以根据需求修改为大于0的数,比如3600等,意思是在3600秒内,打开任意窗口,都不要验证

将p:cookieSecure改为false, cookieMaxAge改为3600(按需求)

3. 修改cas的WEB-INF/spring-configuration/warnCookieGenerator.xml

如下配置:

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"

p:cookieSecure="true"

p:cookieMaxAge="-1"

p:cookieName="CASPRIVACY"

p:cookiePath="/cas" />

修改如第2步

b.配置客户端

1.给自己的项目配置配置文件

在pom.xml中引入cas客户端相关jar包

cas-client-core

2.配置web.xml设置相关配置

<!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 --> 

    <listener> 

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

    </listener> 

    <!-- 该过滤器用于实现单点登出功能,可选配置。 --> 

    <filter> 

        <filter-name>CAS Single Sign Out Filter</filter-name> 

       <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> 

    </filter> 

    <filter-mapping> 

        <filter-name>CAS Single Sign Out Filter</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:xxxx/cas/login</param-value> 

            <!--这里的server是服务端的IP --> 

        </init-param> 

        <init-param> 

            <param-name>serverName</param-name> 

            <param-value>http://localhost:yyyy</param-value>

        </init-param> 

    </filter> 

    <filter-mapping> 

        <filter-name>CASFilter</filter-name> 

        <url-pattern>/*</url-pattern> 

    </filter-mapping> 

    <!-- 该过滤器负责对Ticket的校验工作,必须启用它 --> 

    <filter> 

        <filter-name>CAS Validation Filter</filter-name> 

        <filter-class>     org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class> 

        <init-param> 

            <param-name>casServerUrlPrefix</param-name> 

            <param-value>http://localhost:xxxx/cas</param-value> 

        </init-param> 

        <init-param> 

            <param-name>serverName</param-name> 

            <param-value>http://localhost:yyyy</param-value>

        </init-param> 

    </filter>  

    <filter-mapping> 

        <filter-name>CAS Validation Filter</filter-name> 

        <url-pattern>/*</url-pattern> 

    </filter-mapping> 

    <!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 --> 

    <filter> 

        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> 

        <filter-class> 

            org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> 

    </filter> 

    <filter-mapping> 

        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> 

        <url-pattern>/*</url-pattern> 

    </filter-mapping> 

    <!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 --> 

    <filter> 

        <filter-name>CAS Assertion Thread Local Filter</filter-name>       <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> 

    </filter> 

    <filter-mapping> 

        <filter-name>CAS Assertion Thread Local Filter</filter-name> 

        <url-pattern>/*</url-pattern> 

    </filter-mapping> 

</web-app>

c.退出登录

http://localhost:xxxx/cas/logout

可以在网站标签加入如上链接

在退出登录之后进行跳转到指定页面的配置

修改cas系统的配置文件cas-servlet.xml

<bean id="logoutAction" class="org.jasig.cas.web.flow.LogoutAction"

        p:servicesManager-ref="servicesManager"

        p:followServiceRedirects="${cas.logout.followServiceRedirects:true}"/>

将最后的p名称改为true,可以在退出时跳转到目标页面

修改退出链接为:

<a href="http://localhost:xxxx/cas/logout?service=http://www.baidu.com">退出登录</a>

d.修改配置数据源:让用户名密码从我们自己的数据表验证

1. 修改cas服务端中web-inf下deployerConfigContext.xml 

2.在配置文件中去除使用固定用户名和密码的设置

3.将数据库需要的jar包放入webapps/cas/WEB-INF/lib下

e.可以设置登录界面改造

1.将自己的登录页拷贝到cas下的WEB-INF/view/jsp/default/ui 目录下.

2.将所页面需要的数据文件放到cas目录下

3.将自己的登录页面改名为casLoginView.jsp

d和 e 步骤之后另写...


猜你喜欢

转载自blog.csdn.net/wangshuminjava/article/details/81278998