我正在为一个客户做一个ASP.NET网站,他希望通过IFRAME在其他“经销商”网站上提供他们的报告页面。 经销商网站提供相同的服务,具有不同的品牌。 我需要尽可能避免要求他们在他们的网络服务器上实现任何代码来实现这一点 - 因此使用iframe。
用户将登录经销商网站,加载包含iframe的页面,该iframe会在主站点加载报告。 作为参数,我们会发送转销商ID及其用户名。
我们可以使用SSL服务器证书,但不能使用任何联合登录(如OpenId) - 客户的业务选择。
问题是,主站点如何验证从转销商处加载页面的用户是否确实要求报告页面? 换句话说,如何跨域验证用户,而无需经销商实现代码..
任何想法都会非常感激!
答案 0 :(得分:4)
您的登录表单可以使用一些javascript将登录表单发布到您需要登录的每个域的隐藏iframe(由于跨域安全性问题,您不能使用XMLHTTPRequest)。
请务必将iframe重定向回原始域,否则由于跨域安全性,您将无法从iframe中获取登录状态。
IE支持的最后一招是翻转邪恶的位并添加
P3P: CP="CAO PSA OUR"
到您的HTTP响应标头。这告诉浏览器“我不会做任何坏事,诚实”。
答案 1 :(得分:2)
如果不在转销商网站上实施任何代码,我认为没有令人满意的方法。
相反,我要求他们从经销商网络服务器向主网络服务器发送HTTPS请求,传递一个唯一的密钥来标识自己,以及他们登录用户的用户名。
在主站点上验证后,此密钥将作为经销商的身份验证,并通过扩展,作为其登录用户的身份验证。
此请求的响应将包含一个html片段字符串,经销商可以将其注入任何页面。
此片段将包含iframe,而iframe将使用其用户名直接从主站点加载已登录用户的报告。 此报告内容将包含对特定于转销商的样式表的引用。
通过这种方法,我会说浏览器不需要HTTPS,因为经销商及其用户都经过身份验证,如果该过程是通过HTTPS进行的,我们可以假设没有窃听者。
如果密钥或用户密码遭到破坏,来自浏览器的HTTPS无论如何都没有区别。
答案 2 :(得分:0)
我可能会遗漏某些内容,但如果客户端针对您的服务器进行了身份验证,那么如果您通过iframe查看它仍会进行身份验证。
例如,在服务器上创建一个带有iframe到gmail的HTML页面。只要您在浏览器中对gmail进行了身份验证,就会在该页面中看到您的收件箱...