原创作者: huaronghu
阅读:5887次
评论:2条
更新时间:2011-05-26
最近有个项目使用了开源的CAS做为SSO,看了一些资料之后觉得它某些方面还是相当优秀的。
它的实现原理是这样的:
假设用户在访问http://www.yale.edu/tp之前需要验证身份,我们把用户从http://www.yale.edu/tp重定向到下面的Login URL:
https://secure.its.yale.edu/cas/servlet/login?service=http://www.yale.edu/tp/authenticate.jsp
JSP页面authenticate.jsp是网站资源的一部分。一旦完成了上面描述的初步身份验证,CAS用下面的URL重定向用户浏览器到这个JSP页面:
http://www.yale.edu/tp/authenticate.jsp?ticket=opaque-ticket-string
一旦收到请求,authenticate.jsp页面需要校验这个收到的ticket,它把tickect传送Validation URL(如http://secure.its.yale.edu/cas/servlet/validate)。authenticate.jsp页面需要使用JSSE向Validation URL发送请求并读取数据。当生成这个请求时,authenticate.jsp页面还需要把先前的service ID用service的参数名传送给Validation URL,例子如下:
http://secure.its.yale.edu/cas/servlet/validate?ticket=T&service=S
当CAS从Validation URL收到这个ticket,它检查自己内部数据库,看看是否保存过这个ticket。如果数据库有这个ticket,则进一步检查数据库中和ticket关联的service是否和刚收到的service相匹配。如果匹配,则向请求验证身份的应用URL返回NetID;否则拒绝验证这个请求。
在当在线用户达到几千万级时,这样的反反复复的redirect(就是无数次的http请求与应答)还有它的内部数据库,是否存在严重的性能问题??
btw:CAS支持在集群的环境下吗?
请谁有这方面的经验介绍一下,谢谢。
它的实现原理是这样的:
假设用户在访问http://www.yale.edu/tp之前需要验证身份,我们把用户从http://www.yale.edu/tp重定向到下面的Login URL:
https://secure.its.yale.edu/cas/servlet/login?service=http://www.yale.edu/tp/authenticate.jsp
JSP页面authenticate.jsp是网站资源的一部分。一旦完成了上面描述的初步身份验证,CAS用下面的URL重定向用户浏览器到这个JSP页面:
http://www.yale.edu/tp/authenticate.jsp?ticket=opaque-ticket-string
一旦收到请求,authenticate.jsp页面需要校验这个收到的ticket,它把tickect传送Validation URL(如http://secure.its.yale.edu/cas/servlet/validate)。authenticate.jsp页面需要使用JSSE向Validation URL发送请求并读取数据。当生成这个请求时,authenticate.jsp页面还需要把先前的service ID用service的参数名传送给Validation URL,例子如下:
http://secure.its.yale.edu/cas/servlet/validate?ticket=T&service=S
当CAS从Validation URL收到这个ticket,它检查自己内部数据库,看看是否保存过这个ticket。如果数据库有这个ticket,则进一步检查数据库中和ticket关联的service是否和刚收到的service相匹配。如果匹配,则向请求验证身份的应用URL返回NetID;否则拒绝验证这个请求。
在当在线用户达到几千万级时,这样的反反复复的redirect(就是无数次的http请求与应答)还有它的内部数据库,是否存在严重的性能问题??
btw:CAS支持在集群的环境下吗?
请谁有这方面的经验介绍一下,谢谢。
2 楼 denger 2011-08-15 10:05
对 CAS 稍作修改,就在解决这个问题~ 看看我的博客。
PS: 新浪微薄用的sso也是 CAS.
1 楼 zhaojuan8 2009-05-06 19:18