IIS 7.5中的ASP.Net 4表单身份验证-默认文档不再工作



我最近将一个web应用程序从.Net 3.5迁移到.Net 4,并在IIS 7.5中将应用程序池更改为集成模式。这个应用程序有两个部分:第一部分对公众开放,第二部分仅通过登录。我使用表单身份验证进行登录,这是在根web.config中这样配置的:

<authentication mode="Forms">
  <forms loginUrl="~/private/login.aspx" protection="All" timeout="20" name=".ASPXAUTH" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="~/private/default.aspx" cookieless="UseCookies" enableCrossAppRedirects="true" />
</authentication>

在根web.config中,我有拒绝未经身份验证的用户的默认授权,因此:

<authorization>
  <deny users="?" />
</authorization>

但我在根web.config中配置了以下设置,以允许每个人都看到欢迎页面:

<location path="Default.aspx">
<system.web>
  <authorization>
    <allow users="?,*" />
  </authorization>
</system.web>

多年来,这一直很有效,但现在,如果我不明确地将Default.aspx放在URL中,表单重定向模块会导致登录页面被提供。我已经验证了我的默认页面配置正确,并且在IIS7中启用了它们。我还尝试在web.config中指定它们。我已经验证了DefaultDocumentModule在DirectoryListing模块之前的顺序。

如果我删除元素,问题就会"消失",但效果是默认允许所有用户,这是完全不可取的。

我没主意了。建议?

感谢

I

看起来像是某种默认的文档问题。如果您在站点的IIS管理器中查看"默认文档"列表中的内容。是否有可能除Default.aspx之外的其他内容在列表中排名靠前?如果在你的根网站中发现了与此匹配的内容,它将尝试先去那里,然后重定向到登录。

是否在web.config中显式设置默认文档?如:

<defaultDocument enabled="true">
        <files>
            <clear />
            <add value="Default.aspx" />
            <add value="Default.htm" />
            <add value="index.htm" />
            <add value="index.html" />
            <add value="iisstart.htm" />
        </files>
    </defaultDocument>

好吧,我让一位Microsoft卓越支持工程师为我深入研究了这个问题。我们一起坐在我的工作站上,研究了(a)环境和应用程序配置,以及(b)可能的解决方案。

他引用了MS的这篇"快速发布"文章,该文章建议我通过MMC从IIS中删除ExtensionLessURL处理程序。好吧,我们是一个庞大的组织,服务器在wazoo之外,我不能保证这一改变会一直得到尊重,所以我不想这么做。我们尝试使用web.config删除它们,但没有成功。

所以,我从另一个StackOverflow线程(由Dmitry.Alk发布)向他展示了这个解决方案,他说这是一个很好的解决方案。对于这种特殊情况,它非常有效。

Fast Publish文章引用了此修补程序。提供了一个更新,使某些IIS 7.0或IIS 7.5处理程序能够处理URL不以句点结尾的请求,我必须将其出售给我们的IT"部门"。

我不把我在这里写的东西称为"答案",但我想分享我学到的东西,以防其他人在这个话题上发生。

相关内容

最新更新