论坛首页 Java企业应用论坛

跨域的单点登录

浏览 46411 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-28  
引用
采用一个身份认证中心,各个系统到认证中心来验证用户登录信息。用这个方法来实现单点登录,这样身份认证中心只保存所有的用户信息,而对该用户所具有的权限到具体的各系统中来判断,即角色和权限信息保存在各个系统里面。

认证中心只是保存用户的基本信息,而用户的角色和权限信息保存在各个系统里面。
0 请登录后投票
   发表时间:2007-04-28  
我最近很仔细的深入了一下CAS,还给他们报了个bug,被接受了.
所以我想我有资格来解释一下CAS的东西吧.
CAS用来标志用户的token是存在它自己的域名下的,不是存在web应用的域名下的.CAS判断用户登录由agent决定,agent验证用户信息有两种处理.
1.如果这个用户是以前没登录过的,也就是说这个web应用的域名下没有一个agent颁发的sessionid(在cookie里)的话,那么它会跳转到CAS server的登录界面(这里由CAS server决定是否显示登录界面,还是直接就跳转回来,也就是不是每次都要求输入密码登录的).
2.CAS的登录界面会有两种处理.如果以前没登录过,也就是在CAS server自己的域名下,没有用户的token的话,就要求登录.如果有token的话,就返回一个ticket(也就是不显示登录界面直接重定向返回了).
然后接第一步里面,agent收到ticket以后就提交给CAS server验证,并取得返回信息(是个xml,cas的协议规定的,也可以用saml之类的,这个地方可以取得除了用户姓名以外的信息,这样就可以做同步了,权限的问题可以这么解决).然后agent就保存此时的session,把sessionid放到该web应用域名下的cookie里.
以上逻辑说明了,标志用户身份的token在CAS server的域名下,每个web应用不保存用户身份.因此跨域是绝对没问题的.只是single sign off就需要CAS server的配合了,要把那个token删掉.
不过如果标志身份的token不存在,而sessionid存在,那还是被认为是登录的,只不过是在等待那个session timeout而已.

如果我的理解有误,希望大家指正.
0 请登录后投票
   发表时间:2007-04-30  
fly_ever 写道
引用
采用一个身份认证中心,各个系统到认证中心来验证用户登录信息。用这个方法来实现单点登录,这样身份认证中心只保存所有的用户信息,而对该用户所具有的权限到具体的各系统中来判断,即角色和权限信息保存在各个系统里面。

认证中心只是保存用户的基本信息,而用户的角色和权限信息保存在各个系统里面。


但是两个地方的用户如何保持一致啊?
0 请登录后投票
   发表时间:2007-04-30  
各个系统中,只包含用户ID(标识信息),来与角色关联。
系统初始化的时候,确保用户信息的一致性。
当增加或删除一个用户时,
在认证中心增加或删除用户信息,同时在各系统增加或删除相应的用户角色对应的数据项。这当作一个原子操作。
即使数据不能保存一致,只要保证认证中心的数据是最新的,也对系统没影响,
若子系统中有一个用户ID的对应记录而认证中心没有,则该用户永远没机会被使用到,可以写一个应用程序删掉这些没用的数据;
若子系统中没有用户ID对应的记录而认证中心有,则需要在该系统中为该用户指定相应的角色,才能继续使用该系统。

0 请登录后投票
   发表时间:2007-05-01  
我现在的一个系统:
用户身份信息和权限信息都是集中在授权服务器上的。用户在登录到授权服务器的时候,在授权系统的中缓存了用户在其它系统中的权限信息。子系统上的权限校验是通过调用授权系统的WebService来进行的(每个需要校验的地方都调用WebService检查),这样做保证了在授权服务器上调整了权限后,权限设置立即生效,也避免了用户在子系统与授权服务器两个应用中session失效时间不一致所带来的一些问题。
采用令牌机制,可以支持跨域的单点登录。
系统的实现参考了CAS的令牌处理机制。
这个系统的缺点在于,授权系统对各个子系统有一定的侵入性。好处在于各系统集成得比较好。
0 请登录后投票
论坛首页 Java企业应用版

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