internet-explorer - iframe 中 url 的基本身份验证

标签 internet-explorer authentication iframe basic-authentication

我需要验证从页面上的 iframe(通过 javascript 创建)发送的请求。身份验证将通过基本的 http 身份验证完成。我试过做

http://user:password@server

但显然由于安全异常,这在 IE 中不可用:

http://support.microsoft.com/kb/834489

是否有另一种方法可以将身份验证添加到请求中,以便 iframe 自动与服务器进行身份验证?谢谢。

这是我目前使用的无效代码:
var url = 'http://userName:test@localhost:12000/Service.svc/GetStatus';

try {
    // Attach image to cache auth
    var frame = $('<iframe />');

    frame.load(function() {
        alert('here');
    });

    $('body').append(frame);

    frame.attr('src', url);
    //img.remove();
}
catch (e) {

}

最佳答案

我必须解决这个确切的问题。我能想到的唯一解决方案是使用反向代理。这像这样工作:

Browser (request without basic authentication) -> Reverse Proxy (request with added basic authentication) -> Destination server (requires basic authentication)

因此,有一个与目标服务器分开运行的反向代理。基本身份验证的详细信息存储在反向代理中。

说出 iframe 中的 URL看起来像这样(假设反向代理在端口 8088 上运行):
<iframe src="http://proxy_id.proxy_host.com:8088/cgi-bin/some/path"></iframe>

然后反向代理将请求转换为如下所示:
http://destination_host.com:PORT/cgi-bin/some/path

哪里destination_host , PORT和基本身份验证的详细信息(作为请求 header 发送到目标服务器,因此它们不再在 URL 中可见)取自基于 proxy_id 的反向代理配置。那是在原始 URL 中。

反向代理将更改 host header (从 *.proxy_host.comdestination_host.com )但它不会改变路径,所以代理对来自浏览器的任何请求都是透明的,包括任何下载 CSS 或 JavaScript 文件的子请求,甚至对任何发起的请求来自 JavaScript。

此设置需要适当的 DNS 条目,以便 proxy_id.proxy_host.com解析为反向代理的 IP 和 destination_host.com解析为目标服务器的 IP。视要求而定 proxy_host实际上可以与destination_host相同(例如,如果代理正在目标服务器上运行)。

这是基本的想法。在我的项目中可以动态添加代理配置,所以我必须确保主域的所有子域*.some_host.com解析为相同的反向代理 IP。我正在使用 Acrylic DNS作为默认 Windows hosts文件不支持子域为 * (包罗万象)。

根据您的项目的要求,您可能能够找到可用于该目的的合适的反向代理。我的项目是用 Erlang 编写的,我找不到任何可以使用的代理,所以我实现了自己的。在github上查看:yoonka/charreada .它还没有任何文档,但代码相当简单。它可能与任何用任何语言编写的项目一起使用,但目前的限制是使用 Erlang 调用添加配置(如在我的项目中,它是从另一个 Erlang 应用程序提供的)。如果有任何需求,可以添加从静态文件中读取配置以及更好的文档:)

关于internet-explorer - iframe 中 url 的基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15639280/

相关文章:

html - 条件注释出现在 IE 中

jquery - Fancybox 2 从代码中打开 Iframe 版本

javascript - 确定当前/自己的 iframe

Javascript - 无法在 iframe 的一个 div 中获取元素

html - Internet Explorer 9 无法正确显示 CSS 下拉菜单...?

javascript - Meteor JS 具有 CSS 变量和 IE 支持

android - 使用 Google 帐户进行安全的 Android 身份验证

wordpress - 从哪里开始使用 Google Reader 作为 API?

javascript - Firefox 4 中的基本身份验证未注销

java - 如何避免页面重定向时 Internet Explorer 出现黑屏或白屏?