4

我正在为一个客户创建一个 ASP.NET 网站,该客户希望通过 IFRAME 在其他“经销商”网站上提供他们的报告页面。经销商网站提供具有不同品牌的相同服务。我需要尽可能避免要求他们在其网络服务器上实现任何代码以启用此功能 - 因此使用 iframe。

用户将登录到经销商网站,加载包含 iframe 的页面,然后在主站点加载报告。作为参数,我们将发送经销商 ID 和他们的用户名。

我们可以使用 SSL 服务器证书,但不能使用任何联合登录(如 OpenId)——客户端的业务选择。

问题是,主站点如何验证从经销商处加载页面的用户确实正在请求报告页面?换句话说,如何跨域对用户进行身份验证,而不需要经销商实现代码..

任何想法将不胜感激!

4

3 回答 3

4

对于您需要登录的每个域,您的登录表单可以使用一些 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-01T12:35:17.410 回答
2

如果不在经销商网站上实现任何代码,我认为没有令人满意的方法可以做到这一点。

相反,我会要求他们从经销商网络服务器向主网络服务器发送一个 HTTPS 请求,传递一个唯一的密钥来识别自己,以及他们登录用户的用户名。

一旦在主站点上验证,此密钥将用作经销商的身份验证,并扩展为他们的登录用户。

此请求的响应将包含一个 html 片段字符串,经销商可以将其注入任何页面。

该片段将包含一个 iframe,而 iframe 反过来会使用登录用户的用户名直接从主站点加载登录用户的报告。此报告内容将包含对特定于经销商的样式表的引用。

使用这种方法,我会说浏览器不需要 HTTPS,因为经销商和他们的用户都经过身份验证,如果该过程通过 HTTPS 发生,我们可以假设没有窃听者。

在密钥或用户密码被泄露的情况下,来自浏览器的 HTTPS 无论如何都没有任何区别。

于 2009-06-03T14:44:19.313 回答
0

我可能遗漏了一些东西,但是如果客户端通过了您的服务器的身份验证,那么如果您通过 iframe 查看它,它仍然会通过身份验证。

例如,在您的服务器上创建一个带有 iframe 到 gmail 的 HTML 页面。只要您在浏览器中通过 gmail 身份验证,您就会在该页面中看到您的收件箱...

于 2009-06-01T12:17:45.773 回答