有没有什么解决方案不仅可以代理 NTLM,而且可以将输入端的 HTTP Basic Auth 转换为输出端的 NTLM?
背景:使用 NTLM Auth 的内部 SharePoint 服务器应该可以通过 Apache 反向代理进行访问。问题是 NTLM 是有状态的,mod_proxy 无法处理它。现在,带有 mod_proxy 的 Apache 可以只提供基本身份验证(并通过 passwd 文件或类似文件进行身份验证)并代理到另一个内部基本身份验证到 NTLM 转换器。这只是读取我们的 http 身份验证凭据并将其传递到 SharePoint 服务器。
不存在纯粹基于 Apache 的解决方案。您的选择(我知道并亲自尝试过)是:
还有Nginx Plus声称支持,但我没有尝试。
您可以将新的反向代理放在 Apache 前面。不是“Apache 服务某些东西并代理某些东西”,而是“Caddy 代理一切,在不同后端之间分发”。这将产生一个更好的整体架构,具有明确定义的角色和较弱的服务相互依赖性:代理服务器仅执行代理,而 Web 服务器仅提供服务,并且每个部分都可以独立替换或管理(例如由不同的管理员团队, ETC。)。
如果您选择使用 Caddy,首先您需要将 Apache 移至 80/443 以外的一些端口。将会监听 Caddy,它不仅必须反向代理您的 NTLM 内容,还必须反向代理 Apache 所服务的内容。作为奖励,您可以使用 Caddy 的自动 SSL 功能(例如,它具有内置 ACME 客户端,可与 Let's Encrypt 和零 SSL 交互)、剥离 SSL 并仅对 Apache 的 HTTP 使用一个非默认端口。
或者,您可以将所有负载完全转移到 Caddy 上,从而摆脱 Apache。但我不会那样做。
或者,您可以仅使用 Caddy 运行专用的小型 VM(或容器)并将其暴露给外部;这是我过去在解决完全相同的问题时最终得到的解决方案(OWA 和其他一些网站的反向代理,仅使用单个公共 IP 地址)。如果您选择 Kerio,这也将是唯一可能的解决方案。