0

几年多来,我们已成功使用本文中概述的方法在我们的 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 时,它 302 将我重定向到 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

有人可以帮我弄清楚为什么当它的 WindowsAuthentication 模块应该在那里进行身份验证时,FormsAuthentication 模块会在 WindowsLogin.aspx 页面上启动。为什么只是切换登录 url 会在 Windows Auth 页面上引发 401 挑战。我们正在 Win Server 2008 上使用 IIS 7.5。

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

4

1 回答 1

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 登录页面(他们应该这样做)。

于 2013-12-11T22:31:39.613 回答