我正在为一个客户做一个ASP.NET网站,谁想让他们的报告页面通过IFRAME在其他“经销商”网站上可用。经销商网站以不同的品牌提供相同的服务。我需要避免,在我能做到的地方,要求他们在他们的any服务器上实现任何代码来实现这一点-因此使用iframe。
用户登录经销商网站,加载包含iframe的页面,然后在主站点加载报告。作为参数,我们将发送经销商id和他们的用户名。
我们可以使用SSL服务器证书,但不能使用任何联合登录(如OpenId) --这是客户端的业务选择。
问题是,主站点如何验证报表页面确实是由从经销商加载页面的用户请求的?换句话说,如何跨域对用户进行身份验证,而不需要经销商实现代码。
如果有任何想法,我们将不胜感激!
发布于 2009-06-03 14:44:19
如果不在经销商网站上实现任何代码,我看不到任何令人满意的方法。
相反,我会要求他们从经销商well服务器向主well服务器发送HTTPS请求,传递唯一的密钥来标识自己以及登录用户的用户名。
在主站点上验证后,此密钥将作为经销商的身份验证,并由分机作为其登录用户的身份验证。
此请求的响应将包含一个html片段字符串,经销商可以将其插入到任何页面中。
此片段将包含iframe,而iframe将使用用户的用户名直接从主站点加载登录用户的报告。此报告内容将包含对特定于经销商的样式表的引用。
使用这种方法,我会说浏览器中不需要HTTPS,因为经销商和他们的用户都是经过身份验证的,如果该过程通过HTTPS发生,我们可以假设没有窃听者。
在密钥或用户密码被泄露的情况下,来自浏览器的HTTPS无论如何都不会有什么不同。
发布于 2009-06-01 12:35:17
您的登录表单可以使用一些javascript将登录表单发布到您需要登录的每个域的隐藏iframe (出于跨域安全考虑,您不能使用XMLHTTPRequest )。
确保将iframe重定向回原始域,否则由于跨域安全性的原因,您将无法从iframe中获取登录状态。
IE支持的最后一个技巧是翻转邪恶的比特并添加
P3P: CP="CAO PSA OUR"添加到您的HTTP响应头。它告诉浏览器“我不会做任何坏事,老实说”。
http://support.microsoft.com/kb/323752
http://www.w3.org/P3P/
发布于 2009-06-01 12:17:46
我可能遗漏了一些东西,但是如果客户端是根据您的服务器进行身份验证的,那么如果您通过iframe查看它,它仍然是经过身份验证的。
例如,在您的服务器上创建一个HTML页面,其中包含gmail的iframe。只要你在浏览器中通过了gmail认证,你就会在那个页面上看到你的收件箱……
https://stackoverflow.com/questions/934422
复制相似问题