一觉睡醒突然想起一年前用过的CAS单点登陆服务器,突然发现有一些东西想不明白了,在这里问问大家,有比较了解的谢谢赐教哈。http://www.coin163.com/java/cas/cas.html 这个地址是我看到一个讲解CAS认证的过程,那么问题来了:
1.在步骤3输入正确的用户名密码后,为什么还要单独生成一个service ticket(ST),然后定向给 cas client,然后cas client 再拿这个ST去向CAS server认证,认证成功后返回用户名。 我想说,在第三步输入正确的用户名密码后,那不就代表了登陆成功么? 在重定向到service (即cas client)的时候直接返回userName不就得了,干嘛还要返回ST,再用ST去验证一次,感觉有点多此一举,或者这里面有什么安全性的玄机是我没有参透的。
2.话说在第三步认证成功后CAS会生成一个TGC (当然也是一个cookie,这个cookie里面应该是放的一个票据吧),那么问题又来了,这个Cookie的域是哪一呢? 假如我现在登陆成功web1,然后我要登陆web2,这个时候web2的session中没有相关用户信息,被判断为未登陆,于是调用CAS接口去cas service那里认证,这个时候会用到TGC,如果web1登陆成功,这个时候就会携带TGC,然后认证成功,成功登陆web2. 我们都知道cookie是有域限制的,如果这个TGC的域是设置为的web1 或者 CAS sever,那么在访问web2的时候又如何能后携带这个TGC,然后发送给CAS server验证呢 ?
问题写完了,文字有点多,要耐心看哈。
1.如果不这样的话,那直接在浏览器地址栏把 userName 传给 client 就好了,连密码都不用
2.cookie 是属于CAS Server的,web1跟web2是没有任何关联的,web2没登录跳转到 cas server,cas server 通过 cookie 判断是否已登录,如果已登录就直接生成 st 后跳转到 web2,免去了输入密码的步骤######回复 @JeffreyLin : 是这样的。######st 是返回给浏览器,然后浏览器带着 st 去访问 client 的,不是直接由 server 给 client 的######第一个问题:和在不在浏览器地址输入用户名有什么关系? 我问的是,通过单点登陆页面登陆成功后为什么是返回st,而不是返回username, 你说的是如何提供用户名密码去cas server验证了。 第二个问题我想起来了,去cas server页面是通过浏览器重定向,所以TGC是应该属于cas server的。这个没问题######
为什么是返回st,而不是返回username(这里是重定向cas server-->client)
注意你虽然是通过密码登陆的cas server 但是server和client是分开的,如果我直接返回username,我可以在重定向过程中伪造,有点类似中间人攻击
如果不拿ST再去server校验,无法判断这个usernmae是否是合法的
######正解。 昨天早上洗了个澡突然又想通了,哈哈。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。