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

因为企业多用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. 修改casWEB-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请求的包裹, 比如允许开发者通过HttpServletRequestgetRemoteUser()方法获得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.退出登录

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

在退出登录之后进行跳转到指定页面的配置
修改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 步骤之后另写...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁边

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值