我为一家组织工作,该组织使用托管主机来托管 App1 和一组应用程序 App2..N
App1 是一个 Web 应用程序,由一家大型供应商托管在 Linux Webfarm 上 - 它使用类似表单的身份验证(例如简单的用户名+密码)。
应用程序集合 App2..N 可供我们网络内的用户免费使用,无需登录,只需发送来自我们网关 IP 地址的请求即可。
这些应用程序(App2..N)大约有 10 个独立的在线信息供应商,他们共享一个许可模式,即他们与我的雇主签订合同,通过他们的每个网络应用程序提供信息服务 - 他们似乎都使用了一种方案,即记录我们组织的网关 IP 的 IP 地址 - 并允许请求从该特定 IP 无需登录名/密码即可使用该服务。
大约有十分之一的用户位于我们的防火墙后面,而十分之九的用户则分布在世界各地。
这些远程用户通过类似表单的用户/密码验证来验证使用 App1。
在使用 App1 时,存在某些要求,他们必须访问 App2..N 的资源 - 作为 App1 内的链接公开。
App2..N 的供应商倾向于使用各种其他方式来允许我们的远程用户,但是它们似乎总是随着时间的推移而发生变化和崩溃 - 所有方案都是不同的,并且都在不同的时间发生变化,并且大多数这些供应商没有易于访问的客户支持服务 - 例如,我很难跟上所有中断和来自供应商的解决方案的不便。
我想要设计某种基于网络的应用程序,它可以接受来自网络各个角落的传入请求 - 然后以某种方式通过我们的内部网络传输它们,以便这些不同的请求能够通过“来自”我们的现场网关 IP 地址进行身份验证。
我不知道这种解决方案叫什么,我以为它是反向代理,但不是 100% 确定。
我需要什么类型的解决方案?它叫什么?
是否存在某种类型的服务器,我们可以在我们的网络内和/或 DMZ 中运行,可以将请求重新路由到 App2..N,以便将它们视为来自我们网络内的用户?
限制:我们的网络外部的用户数量远远多于网络内部的用户数量,因此我们不希望为此目的提供对我们网络的 VPN 访问。
由于我不确切知道这些工具和/或概念的正确名称,因此我欢迎对这个问题进行编辑,以便让 SF 社区更加清楚。
编辑:我可能不需要我们的请求的源 IP 地址到App2..N 恰好来自我们的网关 IP,但如果它们来自单个 IP(不一定是我们的网关 IP) - 那也可以起作用。
答案1
听起来好像您是在谈论反向代理。其工作方式是,您将在 DMZ 中运行反向代理。您将向外部用户提供反向代理的 URL。
当用户浏览您提供的 URL 时,您的反向代理会收到连接和请求。然后,它会转换或重写或只是将请求(作为其本身/来自您的 IP 地址)转发到 App1。App1 对用户进行身份验证。
您需要弄清楚如何在反向代理上检测它们是否已通过 App1 的身份验证。这可能是一个 cookie,或一个 URL 元素,或者......???。反向代理可以看到所有的网络流量,因此它应该是可以做到的。
一旦反向代理知道您是否已经通过身份验证,您就可以将其配置为仅为经过身份验证的用户/连接选择性地转发到 App2..N 的连接。
您确实需要确保 App1 提供指向反向代理的 URL,或者您重写 App1 提供的链接以通过反向代理。
配置起来可能很麻烦。如果你使用的是 Apache,那么你需要的是 mod_rewrite 或 mod_rewrite2(如果我没记错的话)。还有其他软件可以做类似的事情(我认为 BlueCoat 就是其中之一,但我不知道它的配置方式)。
希望这可以帮助。