关于CAS的一点理解和验证扩展问题

最近对YALE的CAS简单的研究学习了下,有一点理解,但还有不是特别明确的地方。

1、每次用户通过浏览器访问CAS client1保护的web1应用时,定向到CAS Server验证登陆,用户机器与CAS Server之间建立会话session,cas server产生ST1并定向用户回cas client1,假设用户通过了CAS server认证(login)和验证(vaildation)操作,完成了对web1的访问。如果用户后重新打开一个浏览器(在前一个TGC未过期的情况下),访问cas client2保护的web2应用,在定向到cas server验证时,用户与cas server之间应该是建立新的session,那么cas server产生的ST2应该和第一次的ST1不同,此时应该必须重新在cas server登录。我的理解应该是对的吧,意思是在单点登录的过程中sessionid是不能变的,所以在集成的portal入口中应该采取div嵌入iframe框架,把多个web应用入口都集成到一个登录页面下,对否?

2、关于CAS Server验证扩展的问题。我们知道在cas server(validation)验证通过后,cas client能通过session.getAttribute("edu.yale.its.tp.cas.client.filter.user")获得在cas server登录的用户名。如果我现在不想破坏cas client后的web应用的权限控制,我的想法是应该建立一个cas server登录用户与web应用用户之间的账号映射吧。直接在数据库中创建一个表,建立cas server用户与web用户的映射关系,这个验证扩展应该是对casfilter类进行修改吧,还有这个扩展验证从数据库中取得的web应用已有的用户名密码如何传递给web应用,web应用是否需要做修改?各位大虾能否提供点思路,最好能有简单代码的实现,或者你觉得这种扩展验证还有其他更好的办法也希望不吝赐教!

非常谢谢,希望对cas比较熟悉的daxia解答下。


问题补充:
可能我说得意思不太清楚。
今天仔细看了下serviceticket的源码,其中有一个属性boolean isFromNewLogin();用于判断ST和TGT是否是同时产生的,如果是同时产生的返回True,意思是如果同时产生,肯定是第一次登录;如果ST和TGT不是同时产生,那么证明之前曾经登录过(不然不可能有老的TGT),那么就不用在登陆了。

我提的第一个问题是因为我在一篇文章中看到如果访问Web1的时候重定向到CAS Server并实现访问后,在同一个浏览器地址栏中输入Web2地址不需要重新登录,但如果重开一个新浏览器输入Web2地址,会需要重新到CAS server登录。因此我的理解就是session不能变化,这里我不太明白客户端TGT cookie的作用,难道重新开一个浏览器的时候不会携带上这个TGT cookie吗?因为基于session不能变化的考虑,我的意思是是不是应该做一个统一的登录portal,把各web应用的链接集中到portal中,我说错了,是用frameset。
对于TGT的功能不是特别清楚,但是看源码介绍是相当重要,我的理解似乎是在实现SSO,即第一次登录后的后续访问,如访问web2,web3,....webN时都需要TGT来配合识别是否已经曾经登录过,不知道理解是否正确。还请指教。

第二个问题要做映射是因为现有系统都已经有很多自己的注册用户了,不想破坏原来的用户权限。

3个回答

浏览器重新开之后,服务器就为这个新的浏览器开一个新的session,当然就也就找不到原来的那个session里的Ticket了(具体叫什么我不记得了)。 找不到ticket,就认为你没有登录过。

首先说一下,我记得不太清楚了。但是我确定你的理解有些问题。
1.[quote]我的理解应该是对的吧,意思是在单点登录的过程中sessionid是不能变的,所以在集成的portal入口中应该采取div嵌入iframe框架,把多个web应用入口都集成到一个登录页面下,对否?[/quote]

前面理解得都对,但是你对session和cookie还没有理解清楚。根本就不用什么iframe,如果按你说的,一个SP应用搞一个iframe, 那要是有几十个应用,不是要死人了。
2. [quote]直接在数据库中创建一个表,建立cas server用户与web用户的映射关系,这个验证扩展应该是对casfilter类进行修改吧,还有这个扩展验证从数据库中取得的web应用已有的用户名密码如何传递给web应用,web应用是否需要做修改?[/quote]

这句我没有太理解。 cas提倡是集中验证,也就是用户中心只有一个。如果你非要搞每个SP应用程序都要有一个用户中心也可以(在很多场合是有这个需求的)。这就是你说的那个映射。从cas server里已经能取到用户名了,你只要按照你的规则做映射就行了。这个映射本来就应该在sp应用里做的,怎么会还要传递呢。因为你的cas filter不就是部署在你的web应用里嘛。

至于怎么扩展,源码很少的。你仔细看一下就知道了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!