IIS代理到Apache,并传递域身份验证howto



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

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

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

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

这个解决方案有可能实现吗?如果是,请给我建议。

提前感谢

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

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

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

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

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

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

最新更新