linux - IIS 代理到 Apache 并通过域身份验证 howto

标签 linux apache iis dns single-sign-on

我们的客户在 Linux(Apache、PHP)上运行内部网。授权由登录对话框、PHP session 提供。

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

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

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

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

提前致谢

最佳答案

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

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

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

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

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

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

关于linux - IIS 代理到 Apache 并通过域身份验证 howto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6492642/

相关文章:

c++ - 检查套接字关闭

php - 如何在此设置中为开发人员设置适当的文件权限?

php - 如何将动态子域别名与 apache 服务器上的子文件夹匹配

.net - 如何确保在部署新的 CSS 或 JavaScript 文件后客户端浏览器缓存已被刷新?

linux - 使用带有 Node webapp 的 vhosts 的记录器

php - 当文件夹权限被拒绝时如何显示自定义错误文档?

php - 如何在我的电脑上运行 php 文件

apache - 使用 mod_proxy 从 Apache 重定向到 Tomcat 时出错

asp.net-mvc - MVC 6 网络农场 : The antiforgery token could not be decrypted

iis - 将 ServiceStack App 部署到 Root 下的 IIS 子文件夹