我正在尝试连接到我们创建的 asp.net 网站。它使用 Windows 身份验证,并拒绝未经身份验证的用户访问
网站配置:
<authentication mode="Windows" />
<authorization>
<deny users="?" />
</authorization>
该网站位于我们的 DMZ 中。服务器已连接到域。当我尝试从我们的内部网络连接到该网站时,它运行正常。我收到需要身份验证弹出框,填写我的凭证,然后我就可以进入网站。
当我从外部网络连接时,它不起作用。浏览器正在连接到网站,但弹出框从未显示。最后我得到了一个连接被重置
显然防火墙将我的请求视为漏洞并阻止了它。可以在防火墙的网络包中找到此消息:
401 - Unauthorized: Access is denied due to invalid credentials.
当我从内部位置连接到站点并单击取消或填写错误的凭据时,我遇到同样的错误。
我已经尝试过这个,但没有成功:
- 将 NTLM 移至我的提供商顶部
- 使用 Kerberos 身份验证
- 检查 IIS 中的模块:WindowsAuthentication 和 WindowsAuthenticationModule 都存在
- 将 DisableStrictNameChecking 和 DisableLoopbackCheck 添加到注册表
- 允许匿名身份验证(IIS 级别)
- 允许基本身份验证(IIS 级别)
- 允许所有用户使用 Windows 身份验证(在 web.config 中):基本上删除授权节点。这使用匿名,并且有效。可以访问该站点,但用户未通过身份验证,看不到其个人报告(因此不可用)
- 更改应用程序池用户
- 授予 IUSR 对 arp 文件夹的访问权限
为什么我访问该网站时会出现两个 401 状态?这会导致防火墙阻止流量,因此永远不会显示“需要身份验证”弹出窗口。
答案1
由于我们使用 NTLM,因此 401 数据包会进行多次往返。我们的防火墙将其视为暴力攻击并阻止了它。最后,我们通过配置防火墙并允许多个 401 数据包来修复它,然后防火墙才会将其视为漏洞。我们的系统设置方式使我们无法使用 Kerberos。它只发送一个 401 包,不会被我们的防火墙阻止(在其原始配置中)
感谢@TristanK 的回答。
答案2
同样的问题,但我想我很幸运找到了解决方案。这里看起来也是防火墙问题,但禁用它时没有任何变化。从本地主机访问工作正常,但从同一网络或互联网访问则不行。我尝试更改每个值,但没有成功,但最后我尝试编辑错误消息的功能设置(我的服务器有自己的错误消息),似乎解决了问题。我有本地和远程自定义的详细错误. 换成详细错误,登录弹出窗口工作正常!!!:)