lbom

小江西

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  18 随笔 :: 21 文章 :: 69 评论 :: 0 Trackbacks

需求:

系统A与系统B分别部署在不同域的两台服务器中,但它们的身份都统一在身份认证服务器中;身份认证信息以Session方式存贮于各自系统中,并辅以cookie进行使用。

当用户在A系统登录后,访问B系统时,由于是跨域访问,导致身份信息不能正确的传递到B系统中,从而致使用户需在B系统中重新登录。

clip_image001[6]

解决方案:

处理这类跨域访问时,我们最先使用从B系统向C通过HttpRequest(类AJAX请求)的方式获取身份信息,此方式好处是同步处理,方便用使用;但其限制诸多,如需设置信任站点、用户访问确认等,甚至,在对应用服务器作了一次安全升级后,根本无法访问了。因此,需另行开辟途径,于是,在同事建议下,我们使用IFrame内嵌跨域验证网页,来解决此问题。

1、原理设计:用户在访问B系统时,先使用一内置的iframe,并将iframe的src指向身份认证服务器系统代理验证接口;如果用户已经在A系统中进行过登录,即A域了中已存在着身份认证信息后,身份认证服务器中也将具有其身份信息将其附带着身份认证信息后重定向访问B系统代理接口;B系统代理验证接口在接收到由A系统传递而来的身份认证信息后,通过身份认证服务器验证后,在B系统所在域重建身份认证信息。

2、实现逻辑贴码:

1)B系统代理验证接口:

(1)IFrame逻辑贴码:

clip_image002[6]

(2)JS检测是否通过认证逻辑贴码:

clip_image003[6]

2)身份认证服务器端接口(JSP):

clip_image004[6]

3、注意事项:

1)由于身份认证中心使用cookie作为身份标识,因此,需要用户在浏览器中允许使用cookie的设置;

2)由于在iframe中进行跨域重定向,因此需在IE安全中的跨域浏览子框架项设为启用:

clip_image005[6]

4、源码文件:

……

posted on 2010-02-08 17:55 lbom 阅读(2686) 评论(3)  编辑  收藏

评论

# re: 使用内嵌IFrame,处理系统跨域身份认证的方案与实现 2010-02-08 19:45 凡客诚品官方网站
实施的方式的发生的  回复  更多评论
  

# re: 使用内嵌IFrame,处理系统跨域身份认证的方案与实现 2010-02-09 11:43 ljwan12
系统大了,就统一管理session呗  回复  更多评论
  

# re: 使用内嵌IFrame,处理系统跨域身份认证的方案与实现 2010-02-09 15:08 lbom
@ljwan12
这些系统分属不同的业务范畴,从硬件、软件、安全、投资方面,都无法将它们部署在一起,从而实现Session的统一管理。
因此,我们从系统集成角度出发,来解决此问题!为此,在身份认证服务器和系统端都开发了代理,通过代理解决系统间的单点登录,使问题得到解决  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: