IIS 7.5 在 Windows 身份验证和表单身份验证之间混淆

IIS 7.5 在 Windows 身份验证和表单身份验证之间混淆

我发现在集成应用程序池中运行 .net 4 和 IIS 7.5 的 Server 2008 R2 出现了一些奇怪的行为。

根 web.config 非常清楚,我想使用 Windows 身份验证。

<authentication mode="Windows"/>

没什么奇怪的。

我有一个想要保护的目录,因此我向该目录添加了以下 web.config:

<configuration>
    <system.web>
        <authorization>
            <allow users="MYDOMAIN\MYUSER" />
            <deny users="*" />
        </authorization>
 </system.web>
</configuration>

IIS 中启用了 Windows 身份验证,并由根 web.config 指定,因此我预计会弹出通常的质询/响应对话框并要求输入密码。但我被重定向到一个不存在的 URLhttp://mysite.com/Account/Login?ReturnUrl=%2ftestdir

这似乎是表单身份验证的默认登录目录,我没有使用它,因此请求返回 404 错误。

底层目录上的 ACL 允许目标用户访问该文件。

有人见过 IIS 以这种方式运行吗?

答案1

供将来参考,这看起来像是身份验证模式之间的误解。

IIS 7+ 有两种模式 - 一种使用内置的 HTTP 级别的身份验证选项集 - <system.webServer>,另一种用于 ASP.Net,在<system.web>

直到您运行 ASP.Net 处理程序(无论是在经典模式还是集成模式下)时,ASP.Net 行为才可用,并且仍然(通常)在 IIS 级别system.webServer/security设置之后应用。

在上面的例子中,添加一个 ASP.Net 页面会改变(至少)该页面的行为,并且我会猜测可能添加了通配符处理程序映射来通过 .Net 处理无扩展名的 URL。

然后还需要考虑 URL 授权(IIS,即system.webServer)与 .Net 授权(.Net,即system.web)规则 - 一般来说,每个应用程序选择一组并坚持使用。

答案2

我想我找到了答案,但这确实很奇怪。我在网站上放了一个简单的 .chstml 页面。尽管那只是一个测试页面,但它似乎不知何故对 IIS 施了魔法。

Razor 语法确实很好,但与标准 Web 表单站点混合使用似乎很危险。

相关内容