weixin_42334319 2009-08-14 10:47
浏览 251
已采纳

关于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条回答 默认 最新

  • iteye_8658 2009-08-24 10:03
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Jenkins+k8s部署slave节点offline
  • ¥15 微信小游戏反编译后,出现找不到分包的情况
  • ¥15 如何实现从tello无人机上获取实时传输的视频流,然后将获取的视频通过yolov5进行检测
  • ¥15 WPF使用Canvas绘制矢量图问题
  • ¥15 用三极管设计一个单管共射放大电路
  • ¥15 孟德尔随机化r语言运行问题
  • ¥15 pyinstaller编译的时候出现No module named 'imp'
  • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
  • ¥15 怎么把多于硬盘空间放到根目录下
  • ¥15 Matlab问题解答有两个问题