在iframe中的URL基本身份验证(Basic authentication for a url

2019-07-23 13:06发布

我需要验证的请求的网页上从一个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) {

}

Answer 1:

我必须解决这个确切的问题。 唯一的解决办法我能想出使用反向代理。 这是这样的:

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

所以从目标服务器单独运行的地方反向代理。 基本身份验证的详细信息被存储在反向代理。

说,在URL iframe看起来像这样(假设反向代理端口运行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_hostPORT和基本身份验证(发送到目标服务器的请求头,使他们不再可见的URL)的细节,从基础上的反向代理配置采取proxy_id这是在原来的URL。

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

这种设置需要适当的DNS条目,这样proxy_id.proxy_host.com解析为反向代理的IP和destination_host.com解析到目标服务器的IP。 根据要求proxy_host可实际上一样destination_host (如果代理在目标服务器上运行EG)。


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

根据您的要求的项目你可以找到可用于该目的适宜的反向代理。 我的项目是用Erlang编写的,我找不到,我可以用任何代理,所以我实现了我自己。 检查它在GitHub上: yoonka /牛仔竞技 。 它没有任何的文件还没有,但是代码是相当简单的。 它可以用任何语言的任何项目可能被使用,但目前的限制是配置正在使用Erlang的调用(如在我的项目是正在从另一个二郎应用程序提供)加入。 从静态文件读取配置,以及一个更好的文档,可如果只存在对任何需求增加:)



文章来源: Basic authentication for a url in an iframe