解决WindowsAuthentication模块未针对特定页面进行操作的原因

时间:2013-12-11 21:04:27

标签: asp.net authentication iis windows-authentication mixed-authentication

几年多来,我们已成功使用本文中概述的方法在我们的Asp.Net应用程序中启用混合模式身份验证: https://stackoverflow.com/a/7735008

我们有2个页面,Login.aspx和WindowsLogin.aspx以及上面帖子中突出显示的相应元素。一切都运行良好,直到最近它破裂,我们无法弄清楚原因或何时发生故障(几个月来,我们一直致力于应用程序中的主要新功能,我们添加了一些托管模块和其他东西,但我一次尝试消除它们,但无济于事。)

我们为全局身份验证定义了这个:

<system.web>
    <authentication mode="Forms">
        <forms cookieless="UseCookies" loginUrl="~/Login.aspx" slidingExpiration="true" timeout="10" />
    </authentication>
</system.web>

<system.webServer>
    <security>
        <authentication>
            <anonymousAuthentication enabled="true" />
            <basicAuthentication enabled="false" />
            <digestAuthentication enabled="false" />
            <windowsAuthentication enabled="false" />
        </authentication>
    </security>
</system.webServer>

然后恰当的元素与引用的帖子完全相同。现在,当我直接在浏览器中访问WindowsLogin.aspx时,它会将我重定向到Login.aspx,并将返回URL设置为WindowsLogin.aspx。我已经尝试通过消除所有不需要的配置来简化web.config,直到所有剩下的都是裸机身份验证和其他部分。仍然WindowsLogin.aspx重定向到Login.aspx(即窗体身份验证在WindowsLogin.aspx页面上踢。)

有趣的是,如果我将loginUrl更改为WindowsLogin.aspx(其他所有内容保持完全相同),则WindowsLogin.aspx会按预期向我显示本机浏览器身份验证质询。

我已经尝试过用尽我认为可以将loginUrl设置为Login.aspx的所有选项,但它根本不起作用。

我为302重定向启用了IIS跟踪规则并捕获了一个日志文件,其中WindowsLogin.aspx重定向到Login.aspx(loginUrl设置为Login.aspx)。跟踪文件可在此处获得: http://imbibe.in/public/fr000001.xml

有人可以帮我弄清楚为什么FormsAuthentication模块会在WindowsAuthentication模块上播放,因为它的WindowsAuthentication模块应该在那里进行验证。为什么只切换登录URL会在Windows Auth页面上引发401挑战。我们正在使用Win Server 2008上的IIS 7.5。

更新:我创建了一个简单的Web应用程序,只有3个页面,默认,登录和WindowsLogin,并在同一台服务器上遵循混合模式身份验证方法,它工作正常。这显然意味着它在我们的应用程序/应用程序池中的某些东西正在干扰。我希望提供的IIS Trace日志可以对它有所了解。 如果我从我们的应用程序的web.config中完全删除<authentiction mode="Forms">(这实际上意味着没有启用身份验证),那么Login和WindowsLogin页面工作正常。 但仅使用当前配置,转到WindowsLogin会重定向回Login.aspx。

1 个答案:

答案 0 :(得分:0)

您需要在web.config文件中添加一些位置异常(在常规System.Web部分之外的任何位置):

<!-- Providing it's in the root - No leading slashes! -->
<location path="WindowsLogin.aspx"> 
  <system.web>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>

这将允许所有未经过身份验证的FORMS用户访问该页面。否则,您的用户将继续被重定向到FORMS登录页面(正如他们应该的那样)。