IIS/ARR 反向代理协商直通

IIS/ARR 反向代理协商直通

我在将 IIS/ARR 反向代理到 WildFly 应用服务器时遇到了困难。在 Linux 上,我们使用 Web 服务器来卸载应用服务器的 HTTPS、身份验证和安全功能,因此最初的想法是对 IIS 执行相同的操作。

  1. 应用程序使用 WebSockets,这意味着 Jakarta ISAPI 重定向器没有帮助,我们改用 ARR。
  2. ARR 无法转发经过身份验证的用户信息,因此我们不得不停止在 IIS 上使用 Kerberos,现在 WildFly 通过 waffle 模块支持它。
  3. 我们知道 HeliconTech 的产品(例如 ISAPI Rewrite),但不想使用额外收费的软件。

看来 IIS 会阻止或中断客户端与应用程序服务器之间的协商。我放置在应用程序服务器中的测试 servlet 可以直接访问,但通过 IIS/ARR 访问时会弹出身份验证窗口。

<rule name="ReverseProxyInboundRuleAT" enabled="true" stopProcessing="true">
    <match url="^(auth-test)(/.*|$)"/>                  
    <action type="Rewrite" url="http://127.0.0.1:8080/{R:0}" logRewrittenUrl="true" />  
    <serverVariables>
        <set name="HTTP_SEC_WEBSOCKET_EXTENSIONS" value="" />                   
        <set name="HTTP_X-Forwarded-Proto" value="https" /> 
        <set name="HTTP_X-Forwarded-Port" value="443" />    
        <set name="HTTP_X-Forwarded-HOST" value="site.example.com" />                       
    </serverVariables>
</rule>

身份验证失败,出现华夫饼错误:

error logging in user: com.sun.jna.platform.win32.Win32Exception: The token supplied to the function is invalid

它发生在 Windows Server 2016/2019 和 IIS 10 上。是否可以将受 Kerberos 保护的 SSO 应用程序置于 IIS 后面?

更新:我已检查过,Apache HTTP Server 不会破坏协商协议代理对 WildFly 的请求,但 IIS 会。与 Apache 代理服务器相比,IIS 在协商对话过程中“吃掉”了两个数据包,例如初始提议和回复。

答案1

我发现如果刚安装了此功能,IIS 会“吃掉”身份验证数据包。因此,如果您想要协商直通,只需通过服务器管理器卸载它即可。无论如何,整个任务更加复杂,因为看起来协商中的 NTLMSSP 数据包可以通过 IIS/ARR 传递,但 Kerberos 可能不行。正如这里所述,它在 IIS 上中断,就像在额外的跳跃上一样。

相关内容