【问题标题】:IIS proxy to Apache with passing domain authentication howtoIIS 代理到 Apache 并通过域身份验证 howto
【发布时间】:2011-06-27 12:10:50
【问题描述】:

我们的客户在 Linux(Apache、PHP)上运行 Intranet。授权由登录对话框、PHP 中的会话提供。

客户要求不要向登录其域的 Windows 计算机询问密码,而是使用登录用户的用户名/密码。

出于安全原因,与 apache ldpap 的协作超出了范围。

解决方案是使用专用计算机上的 ISS 作为透明代理,重写运行 Intranet 的 apache linux 服务器,但代理将身份验证信息(登录名、密码)传递给 apache 服务器。

这个方案可以实现吗?如果是这样,请给我建议。

提前谢谢你

【问题讨论】:

    标签: linux apache iis dns single-sign-on


    【解决方案1】:

    我假设带有 LDAP 的 Apache 超出范围的原因是用户名/密码由 PHP 应用程序处理。这个假设有些来自登录对话框的使用。

    基于此假设,转发密码的代理解决方案存在一些问题,因为您基本上是在两个域之间进行身份验证。在两个域之间同步密码可能是不可行的。您会遇到新用户必须等待同步发生才能访问应用程序的问题。在执行同步之前,密码更改也会导致登录问题。您在获取实际密码时也遇到了问题......

    域身份验证的工作方式是,如果初始请求导致质询,Internet Explorer 将专门尝试对远程站点进行身份验证。这可以是 NTLM、基本身份验证或其他;关键是,凭证交换由 Web 服务器使用 HTTP 标头和质询/响应来处理。当 Web 应用程序在 IIS 上执行时,Web 服务器已经执行了 LDAP 验证,并且应用程序只知道用户名而不知道密码。 (在使用 NTLM 的情况下,实际上从未在质询/响应握手中交换密码。客户端通过质询/响应证明它知道正确的密码。)

    您能够做到这一点的唯一方法可能是让 IIS 应用程序通过 LDAP 验证用户,然后从 PHP 应用程序中查找该用户的凭据。您如何将 Windows 域用户映射到 PHP 应用程序中的用户可能是通过域\用户名。应用程序可以加密用户名/密码,并使用重定向将加密的有效负载作为请求参数传递给应用程序,而不是代理。用户登录后,响应通过 URL 将他们重定向到 PHP 应用程序,该 URL 附加了加密的有效负载作为参数。

    加密可以通过 .Net 应用程序和 PHP 应用程序之间的共享密钥来完成。更好的解决方案是使用 PHP 应用程序 SSL 证书的公钥对其进行加密。这样,密钥会定期更改,您不必更新双方的共享密钥。

    您可能还希望在加密负载中包含时间戳,以确保重定向登录仅在特定时间段内有效。您还必须使有效负载保持较小,以使重定向 URL 不会超过浏览器可以处理的最大大小。

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多