我发现在集成应用程序池中运行 .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 表单站点混合使用似乎很危险。