2010-12-06 204 views
6

对不起,如果它是重复的,因为我不是一个安全或网络专家我可能错过了正确的术语来查找信息。如何通过反向代理启用Windows身份验证?

我在处理应用程序截取并修改Web浏览器和Web服务器(请参阅how to intercept and modify HTTP responses on server side?为背景)之间的HTTP请求和响应。我决定在ASP.Net中实现一个反向代理,该代理将客户端请求转发给后端HTTP服务器,将响应中的链接和标题翻译为正确的“代理”URL,并在提取相关信息后将响应发送给客户端从响应。

它工作正常,除了认证部分:Web服务器默认使用NTLM身份验证,只是通过反向代理转发请求和响应不允许用户在远程应用程序进行身份验证。反向代理和Web应用程序都位于同一台物理机器上,并在同一台IIS服务器上执行(Windows Server 2008/IIS 7)。我试过在反向代理应用上启用和禁用身份验证,但没有运气。

我已经找过关于它的信息,它似乎与“双跳问题”有关,我不明白。我的问题是:有没有一种方法可以通过使用NTLM的反向代理对远程应用程序上的用户进行身份验证?如果没有,我可以使用其他认证方法吗?

即使你没有解决我的问题,只是指着我关于它的相关信息,帮助我走出困惑的将是巨大的!

回答

8

我发现问题是什么(它是NTLM):为了让浏览器询问用户的凭据,响应必须有401状态码。我的反向代理将响应转发给浏览器,因此IIS添加了一个标准的HTML代码来解释请求的页面无法访问,从而阻止浏览器询问凭据。 问题被删除的响应内容解决时的状态代码是401

与所有尊重我有那个回答说,几年前,我必须承认这显然是假的。问题是确实解决之后,除去时的状态代码是401的应答内容,但它有没有做最初的问题.. 事实是,Windows身份验证是为了验证人在本地Windows网络中,没有代理服务器存在或甚至不需要。 NTLM身份验证的主要问题是该协议不会对HTTP会话进行身份验证,而是对底层的TCP连接进行身份验证,并且据我所知无法从asp代码访问它。 我试过的每个代理服务器都打破了NTLM身份验证。 Windows身份验证对于用户来说很舒服,因为他永远不需要输入任何应用程序可能位于Intranet中的密码,这对于安全人员来说是可怕的,因为如果站点域值得信任,那么即使没有提示,也会自动登录对于网络管理员来说,这是令人震惊的,因为它将应用程序,传输层和网络层融入了一些“杯子的窗户球”,而不仅仅是简单的http流量。

+0

go for it fonzo! – 2015-11-26 09:51:45

3

尽管这是一个老帖子,我只是想向大家报告,它为我工作得很好用APACHE2.2反向代理和存活= on选项。很明显,这会使代理和SharePoint主机之间的连接保持打开状态并“固定”到客户端代理连接。我不完全知道这背后的机制,但它工作得很好。

但是:有时,我的用户会遇到他们以另一个用户身份登录的问题。所以似乎有一些混合通过会议。我将不得不进行一些进一步的测试。

解决方案的一切(如果您有一个有效的,签名的SSL证书):将IIS切换到基本身份验证。这很好,甚至Windows(即Office with SharePoint连接,所有基于WebClient的流程等)也不会有任何抱怨。 但是,当您仅使用不带SSL/TLS的http以及使用自签名证书时,他们会这样做。

2

我确认,它与作品“保活=的”在APACHE2.2

我examinated使用Wireshark框架,我知道为什么它不工作。 如果TCP数据包未完全按照反向代理接收它们的方式转发,NTLM将无法正常工作。这就是为什么许多反向代理不适用于NTLM身份验证。 (如nginx) 他们转发HTTP请求纠正,但不是TCP数据包。

对于NTLM,需要TCP反向代理。

6

如果TCP数据包不完全转发所收到的反向代理>他们NTLM将无法正常工作。这就是为什么许多反向代理不适用于NTLM身份验证。 (如nginx)>它们正确转发HTTP请求,但不转发TCP数据包。

Nginx具有使用NTLM身份验证的功能。 Keepalive需要启用,只有通过http_upstream_module才可用。此外,在位置块中,您需要指定您将使用HTTP/1.1,并且应为每个代理请求清除“连接”标题字段。 Nginx的配置应该是这个样子:

upstream http_backend { 
    server 1.1.1.1:80; 

    keepalive 16; 
} 

server { 
... 

location/{ 
     proxy_pass http://http_backend/; 
     proxy_http_version 1.1; 
     proxy_set_header Connection ""; 
    ... 
    } 
} 

我抓伤我的头相当长的一段时间这个问题,但对我来说,上述工程。请注意,如果您需要代理HTTPS流量,则需要单独的上游模块。再澄清一点,“keepalive 16”;指定代理允许保留的上游同时连接的数量。根据网站上同时访问者的预期数量调整数量。

+0

谢谢,这个作品。我还添加了proxy_set_header主机,X-Real-IP,X-Forwarded-For;到“位置/”标签。 – pincoded 2016-03-18 12:02:35

相关问题