JAVA和PHP版CAS客户端集成_php cas的集成-程序员宅基地

技术标签: JAVA  CAS客户端  PHP  

一、背景

随着公司的不断的发展壮大和公司信息的建设逐步完善,公司内部系统也在不断的增加,为避免公司员工因系统过多造成账号密码混乱或忘记密码情况。公司决定将公司内部系统进行统一登录管理。通过CAS实现公司内部业务系统,用户只需登录一次就可以访问公司所有内部系统的单点登录。

二、使用范围

公司内部系统所有开发人员、产品部产品设计人员、测试部测试人员。

三、CAS简介

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

四、CAS特性

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

2、 支持多种认证机制: ActiveDirectory 、 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原理和协议

(一)基础模式

基础模式 SSO 访问流程主要有以下步骤:

1. 访问服务: SSO 客户端发送请求访问应用系统提供的服务资源。

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

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

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

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

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

下面是 CAS 最基本的协议过程:



如 上图: CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同 时, CAS Client 会分析 HTTP 请求中是否包含请求 Service Ticket( ST 上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的;于是 CAS Client 会重定向用户请求到 CAS Server ( Step 2 ),并传递 Service (要访问的目的资源地址)。 Step 3 是用户认证过程,如果用户提供了正确的 Credentials , CAS Server 随机产生一个相当长度、唯一、不可伪造的 ServiceTicket ,并缓存以待将来验证,并且重定向用户到 Service 所在地址(附带刚才产生的 Service Ticket ) , 并为客户端浏览器设置一个 Ticket Granted Cookie ( TGC ) ; CAS Client 在拿到 Service 和新产生的 Ticket 过后,在 Step 5 和 Step6 中与 CAS Server 进行身份核实,以确保 Service Ticket 的合法性。

在该协议中,所有与 CAS Server 的交互均采用 SSL 协议,以确保 ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向 的过程。但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的(使用 HttpsURLConnection )。

CAS请求认证时序图如下:


(二)代理模式

该模式形式为用户访问 App1 , App1 又依赖于 App2 来获取一些信息,如: User -->App1 -->App2。 这 种情况下,假设 App2 也是需要对 User 进行身份验证才能访问,那么,为了不影响用户体验(过多的重定向导致 User 的 IE 窗口不停地 闪动 ) , CAS引入了一种 Proxy 认证机制,即 CAS Client 可以代理用户去访问其它 Web 应用。 代 理的前提是需要 CAS Client 拥有用户的身份信息 ( 类似凭据 ) 。之前我们提到的TGC 是用户持有对自己身份信息的一种凭据,这里的 PGT 就是 CAS Client 端持有的对用户身份信息的一种凭据。凭借TGC , User 可以免去输入密码以获取访问其它服务的 Service Ticket ,所以,这里凭借 PGT , Web应用可以代理用户去实现后端的认证,而 无需前端用户的参与。 下面为代理应用( helloService )获取 PGT 的过程:(注: PGTURL 用于表示一个 Proxy 服务,是一个回调链接; PGT 相当于代理证; PGTIOU 为取代理证的钥匙,用来与 PGT 做关联关系;)


如上面的 CAS Proxy 图所示, CAS Client 在基础协议之上,在验证 ST 时提供了一个额外的PGT URL( 而且是 SSL 的入口) 给 CAS Server ,使得 CAS Server 可以通过 PGT URL 提供一个 PGT 给CAS Client 。 CAS Client 拿到了PGT(PGTIOU-85 … ..ti2td) ,就可以通过 PGT 向后端 Web 应用进行认证。

下面是代理认证和提供服务的过程:


如 上图所示, Proxy 认证与普通的认证其实差别不大, Step1 , 2 与基础模式的Step1,2 几乎一样,唯一不同的 是, Proxy 模式用的是 PGT 而不是 TGC ,是Proxy Ticket ( PT )而不是 ServiceTicket 。

六、CAS客户端JAVA版本实现配置

(一)引入CAS客户端核心JAR包cas-client-core-3.3.3.jar。

(二)在项目的WEB.xml文件中添加

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

<listener>

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

</listener>

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

<filter>

        <filter-name>CASSingle SignOutFilter</filter-name>

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

 </filter>

 <filter-mapping>

        <filter-name>CASSingle SignOutFilter</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://192.168.2.232:8080/cas/login</param-value>

        </init-param>

        <init-param>

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

           <param-value>http://192.168.2.232:9060</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://192.168.2.232:8080/cas/</param-value>

        </init-param>

        <init-param>

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

           <param-value>http://192.168.2.232:9060</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>CASHttpServletRequestWrapperFilter</filter-name>

        <filter-class>

           org.jasig.cas.client.util.HttpServletRequestWrapperFilter

        </filter-class>

</filter>

<filter-mapping>

       <filter-name>CASHttpServletRequestWrapperFilter</filter-name>

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

</filter-mapping>

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

<filter>

        <filter-name>CASAssertion ThreadLocalFilter</filter-name>

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

</filter>

<filter-mapping>

        <filter-name>CASAssertion ThreadLocalFilter</filter-name>

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

</filter-mapping>

 (三)单点登录配置完后客户端接收单点登录成功后的数据代码

AttributePrincipalprincipal = (AttributePrincipal) request.getUserPrincipal();

loginname=principal.getName();

 

七、CAS客户端PHP版本实现配置

(一)  引入CAS客户端文件phpCASClient文件夹下的CAS文件夹和cas.php文件。

下载地址:http://download.csdn.net/download/xiangyuanhong08/10044448

(二)  参考phpCASClient文件夹下的login.php页面修改系统登录处理页面。


通过phpCAS::getUser();获取CAS登录成功后的登录用户的账号,然后根据账号验证是否可以登录子系统。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiangyuanhong08/article/details/78390664

智能推荐

input type=file accept中限制文件类型pdf、doc、docx、 jpg、 png、xls 、xlsx等格式_type="file" accept-程序员宅基地

文章浏览阅读1.2w次。accept="application/msexcel,application/msword,application/pdf,image/jpeg,image/png,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.openxmlformats-officedocument.word..._type="file" accept

TDA4程序刷写方案_ccs中tda4工程文件-程序员宅基地

文章浏览阅读4.2k次,点赞4次,收藏27次。TDA4是适用于 ADAS 和自动驾驶汽车的TDA4VM Jacinto 处理器,它的程序刷写是嵌入式软件开发过程中必须的一个任务,本文主要介绍它的刷写方案。_ccs中tda4工程文件

关于cfile fopen fopen_s 在windows vista win7 win8 win 10系统盘目录创建文件失败解决方案-- fopen 创建文件失败_cfile 创建文件失败-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏3次。由于windows vista win7 win8 win 10 添加了UAC权限,所以会导致 在系统盘下 创建文件失败。返回拒绝访问错误。解决办法如下:UAC是微软为了提高Windows的安全性,自Windows Vista开始引入的新安全机制。传统的NT内核系统依靠access token来做权限处理,access token由当前用户所在的用户组的权限决定_cfile 创建文件失败

产品经理漫谈-程序员宅基地

文章浏览阅读55次。本文分析了互联网、软件的产品经理与传统行业的产品经理有什么异同。 文章从“产品经理”一词的来源说起,之后转到互联网、软件行业巨头的“产品经理”招聘广告,从中发现了这个职位的内涵变化。那么,新兴行业的产品经理在概念上究竟有什么发展?为什么会有这些发展?结果导致产品经理的职责、技能要求有哪些不同?文章的后半部分,分析并提出了造成差异的 5 大因素: 第一, 市场阶段不同,成熟市场与新兴市场。 ..._漫谈产品经理云

计算机丢失MSVCR100.dll文件的解决办法_file:///e:/5.4.0.1/msvcr100.dll%20%e6%b2%a1%e6%9c%-程序员宅基地

文章浏览阅读2.1k次。@计算机丢失MSVCR100.dll文件的解决办法网上常见的两种:1、下载360安全卫士,进行人工修复–—>失败2、下载msvcr.100文件放入X:\Windows\system32 或者X:\Windows\system32\syswow64文件夹中3、然后cmd(用管理员身份运行)win+R键,在弹出的框里面输入“regsvr32 msvcr100.dll,但是也会弹出错误的信息—>电脑提示找不到入口点DllRegisterServer4、为了解决3的问题,去cmd里面输入reg_file:///e:/5.4.0.1/msvcr100.dll%20%e6%b2%a1%e6%9c%89%e8%a2%ab%e6%8c%87%e5%ae

OpenGL ES纹理贴图-程序员宅基地

文章浏览阅读333次。转载自:http://seya.iteye.com/blog/532525OpenGL可以把纹理映射到指定的图形的表面上。简单一点的,就是给平面映射纹理,比如一个四边形,一个长方体的6个面,都可以指定位图作为纹理映射到各个面上。关于将一个位图作为纹理映射到某个或者多个面上,可以学习Jeff Molofee的OpenGL系列教程。对于指定的多个纹理,要根据自己的需要映射到不同的面上,需要..._opengl es surface 贴图

随便推点

【第三方对接】使用 永中Office 实现在线 Office 整合到 Spring 项目_永中office npapi插件-程序员宅基地

文章浏览阅读2.7k次。文章目录1、永中 Office 实现在线 Office(1)永中 Office 介绍(2)项目需求对比(3)基本整合过程(4)调用逻辑图(5)实际使用案例1、永中 Office 实现在线 Office(1)永中 Office 介绍永中Office官网,相比于PageOffice,个人觉得从使用方面来说,永中Office好用一点,永中Office对于开发者来说,有两个选择,一个是在线版webOffice功能较少(对于我这种需求对文档内容细节把控的来说,不考虑了),另一个是NP插件版,这个版本是和永中技术_永中office npapi插件

solaris 10(sunos 5.10)上安装java-程序员宅基地

文章浏览阅读849次。从官网下载64位的jdk:Solaris SPARC 64-bit92.9 MBjdk-8u45-solaris-sparcv9.tar.gz 下载后上传到主机上,执行命令: gzip -dc jdk-8u45-solaris-sparcv9.tar.gz | tar xf - 解压完成后目录为: jdk1.8.0_45 修改当前用户下...._solaris 5.10

MFC GDI绘图基础_mfc 设置视口 原点 大小-程序员宅基地

文章浏览阅读474次。一.关于GDI的基本概念什么是GDI?Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上。在Windows操作系统中,动态链接库C:/WINDOWS/system32/gdi32.dll(GDI Client DLL)中定义了GDI函数,实现与设备无关的包括屏幕上输出像素、在打印机上输出硬拷贝..._mfc 设置视口 原点 大小

Delphi XE不生成__history目录_delphi history-程序员宅基地

文章浏览阅读1.9k次。In Tools - Options - Editor Options you can un-tick 'Create Backup Files' and or change the number for 'File Backup Limit' further down the page._delphi history

北大信科推免之旅_四非软微-程序员宅基地

文章浏览阅读7.8k次,点赞26次,收藏67次。晨光熹微已是,经历一路绿皮火车颠簸,从燕园古典琼楼玉宇再到农家田园的热浪滚滚;点下国家系统北大学硕拟录取通知确认按钮的那刻,心中万千思绪涌来,百感交集;将近三个月的保研之旅终于画上了个句号,回首这段时间的经历仍是觉得忐忑不已,如梦如幻。突然想将这一段宝贵铭心的经历记录。只要以后的自己还能够想起这段记忆或者学弟学妹看到这篇经验帖的时候能有所收获,那么一切都是值得。本人情况_四非软微

10 篇 经 典 美 文 欣 赏-程序员宅基地

文章浏览阅读71次。境由心造 一个人的处境是苦是乐常是主观的。 有人安于某种生活,有人不能。因此能安于自已目前处境的不妨就如此生活下去,不能的只好努力另找出路。你无法断言哪里才是成功的,也无法肯定当自已到达了某一点之后,会不会快乐。有些人永远不会感到满足,他的快乐只建立在不断地追求与争取的过程之中,因此他的目标不断地向远处推移。这种人的快乐可能少,但成就可能大。 ..._美文欣赏系列