需求:
系统A与系统B分别部署在不同域的两台服务器中,但它们的身份都统一在身份认证服务器中;身份认证信息以Session方式存贮于各自系统中,并辅以cookie进行使用。
当用户在A系统登录后,访问B系统时,由于是跨域访问,导致身份信息不能正确的传递到B系统中,从而致使用户需在B系统中重新登录。
解决方案:
处理这类跨域访问时,我们最先使用从B系统向C通过HttpRequest(类AJAX请求)的方式获取身份信息,此方式好处是同步处理,方便用使用;但其限制诸多,如需设置信任站点、用户访问确认等,甚至,在对应用服务器作了一次安全升级后,根本无法访问了。因此,需另行开辟途径,于是,在同事建议下,我们使用IFrame内嵌跨域验证网页,来解决此问题。
1、原理设计:用户在访问B系统时,先使用一内置的iframe,并将iframe的src指向身份认证服务器系统代理验证接口;如果用户已经在A系统中进行过登录,即A域了中已存在着身份认证信息后,身份认证服务器中也将具有其身份信息将其附带着身份认证信息后重定向访问B系统代理接口;B系统代理验证接口在接收到由A系统传递而来的身份认证信息后,通过身份认证服务器验证后,在B系统所在域重建身份认证信息。
2、实现逻辑贴码:
1)B系统代理验证接口:
(1)IFrame逻辑贴码:
(2)JS检测是否通过认证逻辑贴码:
2)身份认证服务器端接口(JSP):
3、注意事项:
1)由于身份认证中心使用cookie作为身份标识,因此,需要用户在浏览器中允许使用cookie的设置;
2)由于在iframe中进行跨域重定向,因此需在IE安全中的跨域浏览子框架项设为启用:
4、源码文件:
……