CAS--单点登录解决方案简单介绍
2018-02-25 21:58
274 查看
因为企业多用SOA架构,所以目前企业比较流行的企业业务整合方案显得尤为重要.下面对其解决方案之一------单点登录做一个探究.
特点: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中的,这样当我们清除浏览器的缓存之后,就会把票据清除,没有票据后就要重新登录.
可以将tomcat修改为指定的端口xxxx在tomcat目录 conf/server.xml同时需要修改CAS的配置文件 找到cas文件下WEB-INF/cas.propertiesserver.name=http://localhost:xxxx
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:cookieM
107b0
axAge="-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步
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>
在退出登录之后进行跳转到指定页面的配置修改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和 e 步骤之后另写...
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.propertiesserver.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:cookieM
107b0
axAge="-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-core2.配置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.jspd和 e 步骤之后另写...
相关文章推荐
- Mvc4单点登录之一Cas简单介绍
- 单点登录之CAS简单介绍
- 玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)
- 企业单点登录解决方案(CAS)之五使用maven覆盖安装
- CAS 实现单点登录(SSO)简单实例demo(二)
- CAS 介绍 单点登录认证系统
- CAS协议介绍和在apache使用cas实现单点登录sso
- 玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)
- java web项目利用Filter进行单点登录的简单实现(解决方案)
- 企业单点登录解决方案(CAS)之四身份验证
- SharePoint 解决方案手动打包简单介绍
- java单点登录系统CAS的简单使用
- 著名ERP厂商的SSO单点登录解决方案介绍一
- CAS 单点登录实战 (1) 介绍
- cas-简单的验证cas服务器登录和读取数据库账号密码登录
- 转)SSO单点登录在互联网电商应用中的解决方案(基于CAS的改造)
- 以登录实例简单介绍Servlet使用
- 玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)
- 企业单点登录解决方案(CAS)之三安全指南
- CAS实现SSO单点登录原理介绍