论坛首页 Java企业应用论坛

跨域的单点登录

浏览 46333 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-10  
要实现跨域的单点登录功能,请问各位目前有哪些比较好的开源产品比较好用?
我知道的有Yale CAS耶鲁大学开发的单点登录(Single Sign On)系统,不知道谁有对它的详细了解,或者还有其他比较合适的开源的可供选择。
   发表时间:2006-08-11  
在CAS中,没有登录的用户都重定向到CAS的登录页面来,登录成功后返回到之前的页面。
难道用户的数据信息都是集中保存在这里,而不是在每个应用系统中保存自己的用户信息?
0 请登录后投票
   发表时间:2006-08-30  
考虑的一个设计思路为:
      采用一个身份认证中心,各个系统到认证中心来验证用户登录信息。用这个方法来实现单点登录,这样身份认证中心只保存所有的用户信息,而对该用户所具有的权限到具体的各系统中来判断,即角色和权限信息保存在各个系统里面。
在身份认证中心,通过cookie保存用户登录信息,在各个系统,采用session保存用户登录信息。
      登录过程为:
      用户在各个系统登录的操作将会转发到身份认证中心的登录页面来登录,登录完成后会回到之前的那个页面。也可以直接到身份认证中心来登录,在身份认证中心登录完成后,登录信息会记录到cookie中,然后会转发到一个默认的系统  的页面上来。登录完成后进入系统时会把登录信息记录到当前系统的session中。
      用户从一个系统A进入另一个系统B时,先在B系统的session中取登录信息,如果没有,则转向身份认证中心去读取cookie中的信息,如果没有在cookie中 取到登录信息,则说明还没有登录,则需要转向登录页面重新登录。如果cookie中有登录信息,则说明已经登录,然后写登录信息到B系统的session中。
      各个系统及与身份认证中心的信息传递是通过在url上传递参数实现的。
      这样的想法不知道有没有什么很大的缺陷,麻烦各位给指点一下。
0 请登录后投票
   发表时间:2006-08-31  
极大的不安全啊!
    呵呵,最近刚刚在研究JAVA安全机制, JDK1.4以后版本中所带的JGSS-API本身就支持的. 当然最近还在研究中.
    你如果想看,建议你阅读<深入java平台安全>这本书, 不过有些晦涩倒是真的.
0 请登录后投票
   发表时间:2006-08-31  
fly_ever 写道
考虑的一个设计思路为:
      采用一个身份认证中心,各个系统到认证中心来验证用户登录信息。用这个方法来实现单点登录,这样身份认证中心只保存所有的用户信息,而对该用户所具有的权限到具体的各系统中来判断,即角色和权限信息保存在各个系统里面。
在身份认证中心,通过cookie保存用户登录信息,在各个系统,采用session保存用户登录信息。
      登录过程为:
      用户在各个系统登录的操作将会转发到身份认证中心的登录页面来登录,登录完成后会回到之前的那个页面。也可以直接到身份认证中心来登录,在身份认证中心登录完成后,登录信息会记录到cookie中,然后会转发到一个默认的系统  的页面上来。登录完成后进入系统时会把登录信息记录到当前系统的session中。
      用户从一个系统A进入另一个系统B时,先在B系统的session中取登录信息,如果没有,则转向身份认证中心去读取cookie中的信息,如果没有在cookie中 取到登录信息,则说明还没有登录,则需要转向登录页面重新登录。如果cookie中有登录信息,则说明已经登录,然后写登录信息到B系统的session中。
      各个系统及与身份认证中心的信息传递是通过在url上传递参数实现的。
      这样的想法不知道有没有什么很大的缺陷,麻烦各位给指点一下。

cas 正是这样实现的 它仅仅负责校验用户名密码,具体授权不归也不该它管,由各个系统自己负责
0 请登录后投票
   发表时间:2006-08-31  
凤舞凰扬 写道
极大的不安全啊!

是指使用cookie保存信息不安全吗?
还是指其他的方面,还望明示。
我所知的有一些实现单点登录的都是使用cookie的。
0 请登录后投票
   发表时间:2006-08-31  
fly_ever 写道
凤舞凰扬 写道
极大的不安全啊!

是指使用cookie保存信息不安全吗?
还是指其他的方面,还望明示。
我所知的有一些实现单点登录的都是使用cookie的。


安全的sso方案中cookie中只有token而不会保存真实的信息。

sso一般有两种实现,基于agent和proxy。

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系统所在域,所以可以直接将以前用户的账号信息发回。


基于proxy的实现方案我只看到过novel iChain实现。这种方案需要通过DNS将多个系统的域名配置在一个承担SSO的Proxy上。当用户输入系统地址打开页面时,会首先链接到这个Proxy,再由Proxy转发到实际系统。原有系统因为用户没有登录,那么会返回登录页面,这时候iChain会截获这个登录页面,用自己的登录页面代替。用户在iChain提供的页面中输入用户名和密码,随后iChain根据LDAP(Novel的LDAP可以说是这行的老大了)中的信息查询出原有系统的用户名和密码,通过一次Http Post将用户账号发送给原有系统。

如果用户打开新系统页面,那么基本不骤不变,只是iChain返回自己登录页面时,因为在同一个域中,可以发现该用户已经登录过,然后就直接Http Post到新系统而不出现登录页面。

iChain的登录过程是从我参加的一个项目推测的,没有官方的技术文档,有哪位朋友熟悉请修正一下。

其实SSO只是最简单的一个步骤,如何做好多系统之间的账号同步和授权才是大难题。
0 请登录后投票
   发表时间:2006-08-31  
fly_ever 写道
考虑的一个设计思路为:
      采用一个身份认证中心,各个系统到认证中心来验证用户登录信息。用这个方法来实现单点登录,这样身份认证中心只保存所有的用户信息,而对该用户所具有的权限到具体的各系统中来判断,即角色和权限信息保存在各个系统里面。
在身份认证中心,通过cookie保存用户登录信息,在各个系统,采用session保存用户登录信息。
      登录过程为:
      用户在各个系统登录的操作将会转发到身份认证中心的登录页面来登录,登录完成后会回到之前的那个页面。也可以直接到身份认证中心来登录,在身份认证中心登录完成后,登录信息会记录到cookie中,然后会转发到一个默认的系统  的页面上来。登录完成后进入系统时会把登录信息记录到当前系统的session中。
      用户从一个系统A进入另一个系统B时,先在B系统的session中取登录信息,如果没有,则转向身份认证中心去读取cookie中的信息,如果没有在cookie中 取到登录信息,则说明还没有登录,则需要转向登录页面重新登录。如果cookie中有登录信息,则说明已经登录,然后写登录信息到B系统的session中。
      各个系统及与身份认证中心的信息传递是通过在url上传递参数实现的。
      这样的想法不知道有没有什么很大的缺陷,麻烦各位给指点一下。


和CAS的实现很接近。不过CAS在系统间传送和cookie中存放的都是加密后数据
0 请登录后投票
   发表时间:2006-09-01  
pikachu 写道


安全的sso方案中cookie中只有token而不会保存真实的信息。

sso一般有两种实现,基于agent和proxy。

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系统所在域,所以可以直接将以前用户的账号信息发回。



谢谢楼上兄弟详细的回复,
这样看来,把用户信息加密后传输,而用cookie保存的token信息就相当于密钥了,恩,这样也蛮好的。
0 请登录后投票
   发表时间:2006-09-04  
CAS Server不能跨domain的,就是因为用了cookie, 还是想想用passport吧。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics