ASP.NET MVC,Windows身份验证和负载平衡器探测器

时间:2014-11-14 12:59:15

标签: .net asp.net-mvc iis windows-authentication iis-8

我有一个在Windows 8和Windows Server 2012上运行Windows ASP.NET集成身份验证的ASP.NET MVC应用程序。此应用程序部署在两台服务器上,这两台服务器位于负载均衡器之后。负载均衡器正在探测两个应用程序服务器,以确定它们是否正在运行 - 它尝试下载名为IsAlive.html的静态html页面。如果负载均衡器成功下载HTTP Status 200 OK的页面,则认为服务器正在运行。

问题是,无法使用Windows集成身份验证对负载均衡器的请求进行身份验证。因此,我试图在没有任何形式的身份验证的情况下公开提供网页IsAlive.html。

这就是web.config的样子。 IsAlive页面位于Web应用程序的根目录中。

<system.web>
    <httpRuntime targetFramework="4.5" />
    <compilation debug="true" targetFramework="4.5" />
    <authentication mode="Windows" />        
</system.web>

<!-- IsAlive.html static page is used by a load balancer for server fault detection. It requires anonymous authentication. -->
<location path="IsAlive.html">
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>
</location>

这是行不通的,直到我在IIS中打开匿名身份验证(在应用程序的虚拟目录范围内):

IIS anonymous authentication

但这种方法存在问题:

1)负载均衡器现在在尝试下载IsAlive.html页面时随机收到401个未经授权的响应。有时它正在使用200 OK,有时它不是。我在IIS日志中看不到401响应。负载均衡器管理员向我报告了此问题(我无法访问此设备)。

2)在此页面上:http://technet.microsoft.com/en-us/library/jj635855.aspx我找到了可能的原因:

  

请注意,为同一网站配置匿名身份验证和其他身份验证类型可能会导致身份验证问题。

     

如果配置匿名身份验证和其他身份验证类型,则结果由模块运行的顺序决定。例如,如果同时配置了匿名身份验证和Windows身份验证,并且首先运行匿名身份验证,则Windows身份验证永远不会运行。

我的问题是:如何在没有任何形式的身份验证的情况下正确地使IsAlive.html页面加载平衡器探针,同时在Windows集成身份验证下还有其他ASP:NET MVC应用程序?

谢谢你, 米甲

3 个答案:

答案 0 :(得分:2)

我找到了解决方案:

  1. 设置您的网站配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!--for whole site, disable anonymous authentication and enable windows authentication-->
        <system.webServer>
            <security>
              <authentication>
                    <windowsAuthentication enabled="true" />
                    <anonymousAuthentication enabled="false" />
              </authentication>
            </security>
      </system.webServer>
      <!--for specific page, disable windows and enable anonymous authentication-->
      <location path="IsAlive.html">
            <system.webServer>
              <security>
                    <authentication>
                      <windowsAuthentication enabled="false" />
                      <anonymousAuthentication enabled="true" />
                    </authentication>
              </security>
            </system.webServer>
      </location>
    </configuration>
    
  2. 要在子文件夹中更改身份验证,必须将IIS设置为在服务器级别的applicationHost.config中允许它。为此,请执行以下步骤:

    1. 打开IIS管理器
    2. 在“连接”窗格中选择服务器
    3. 在主窗格中打开配置编辑器
    4. 在顶部的Sections下拉列表中,选择要解锁的部分,system.webServer / security / authentication / anonymousAuthentication
    5. 点击右侧窗格中的解锁属性
    6. 对system.webServer / security / authentication / windowsAuthentication部分重复
    7. 重新启动IIS(可选) - 在“连接”窗格中选择服务器,在“操作”窗格中单击“重新启动”
  3. 我能够验证Fiddler的正确行为:

      

    fiddler

答案 1 :(得分:0)

您可以在该网站下的同一个应用程序池中的虚拟目录(app)中部署IsAlive.html,并为该应用程序关闭Windows auth。

答案 2 :(得分:0)

您可以直接将页面添加到iis服务器,不需要为错误处理单独创建页面,转到iis并单击默认站点,在那里您将看到iis上的错误选项卡,更改你的页面