qq2477 2009-10-10 22:04
浏览 627
已采纳

CAS 跨域的问题

[color=red]麻烦各位了,有以下问题:[/color]

CAS 是通过 TGT(Ticket Granting Ticket) 来获取 ST(Service Ticket) ,通过 ST 来访问服务。网上说配置好后。
CAS是基于agent的。一次完整的sso过程为

1.用户第一次打开系统A的页面
2.系统A发现当前用户没有登录
3.系统将登录过程委托给本地的agent,比如CAS的java client或者web client
4.本地agent将页面转向给sso系统,并且生成一个随机的token
5.用户在sso系统上输入账号密码,登录成功
6.sso系统调用系统A上agent的一个url,将账号信息加密发送回A
7.该agent通过生成的token解密账号信息,传送到系统A内部。
8.系统A接收到该账号随后进行授权操作。

如果用户打开系统B页面,而该系统也运行同一个SSO的agent,那么过程同上面类似,只是跳过第5步。这时用户浏览器都是处于SSO系统所在域,所以可以直接将以前用户的账号信息发回。

[color=red]不是很明白,用户先访问A后,再本地访问访问B的时候,系统B收到什么信息可以确认改用户访问过A!系统A与系统B的域名不一样,不会是cookie,那是什么?在网上看了看,下面一段[/color]

上图是一个最基础的 CAS 协议, CAS Client 以 Filter 方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同时, CAS Client 会分析 HTTP 请求中是否包请求 Service Ticket( 上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的,于是, CAS Client 会重定向用户请求到 CAS Server ( Step 2 )。 Step 3 是用户认证过程,如果用户提供了正确的 Credentials , CAS Server 会产生一个随机的 Service Ticket ,然后,缓存该 Ticket ,并且重定向用户到 CAS Client (附带刚才产生的 Service Ticket ), Service Ticket 是不可以伪造的,最后, Step 5 和 Step6 是 CAS Client 和 CAS Server 之间完成了一个对用户的身份核实,用 Ticket 查到 Username ,因为 Ticket 是 CAS Server 产生的,因此,所以 CAS Server 的判断是毋庸置疑的。


[color=red]CAS Client 会分析 HTTP 请求中是否包请求 Service Ticket,这个st 是怎么放到http请求中去的?网上那些例子好像直接输入一个url,不带参数的,也有单点登录效果。[/color]
[b]问题补充:[/b]
7.原理剖析
Yale CAS使用了Ticket Granting Cookie (简称TGC)去作为获取Service Ticket(简称ST)的凭据,这个TGC 是保存在客户端的cookie,即当第2次被其他CAS Client重定向的时候,CAS Server实际上已经从用户的Cookie中抓取到TGC,然后知道TGC对应的用户,因此避免了再次登录,如果CAS Server抓取不到TGC,则用户需要登陆。

众所周知,cookie是不能跨域的。但是CAS能够做abc.com和xyz.com的sso,因为CAS Server缓存了所有的ticket,所以Client无需共享cookies。


是不是这个CAS server 也可以通过http访问的
应用场景是不是这样 :一个应用 是 domain1.com一个应用是domain2.com cas server 的 域名 是 domain.com ,所有对 domain1和domain2 的请求都会转发到domain.com,没有登录的话,在domain.com登陆,设置的cookie TGC的域是doamin.com,以后所有对domain1和domain2的请求都会转发到domain.com,也就是CAS server ,这个时候便可以获得这个cookie TGC进行验证。

是不是这样?
[b]问题补充:[/b]
呵呵 谢谢

我先前不清楚的地方就是 我觉得先登录A后,再进入B时候,必须携带一个标志,才能证明这个用户先前已经登陆了,而A 与B的域不同,进入B的时候不能拿到cookie的,原来都会转发到一个统一的域拿到这个cookie,也就是标志,而这个cookie也是通过cas server进行设置的,cas server是可以通过http访问的,所以可以在浏览器下设置这个cookie。当然也可以在登录完后在A ,B各自的域设置cookie。

那这种模式,我也可以自己实现 ,不用cas了?? 好像配置cas的时候有什么key的 是用来干什么的,加密信息吗?加密什么信息?谢谢 我没有配置过,之前在做一个单点登录的时候碰到问题就百度到了 cas 呵呵

  • 写回答

4条回答 默认 最新

  • 剑晨2003 2009-10-11 01:05
    关注

    CAS Client 会重定向用户请求到 CAS Server ( Step 2 )时候 对应casserver有个cookie 是记录ticketid的,如果有值CAS Server 检验是否合法登陆成功回到系统b,如果不合法或为null则跳到登陆页面,

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

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题