表单身份验证忽略默认文档

Spa*_*oft 34 asp.net iis-7 forms-authentication

我花了一天半的时间试图解决这个问题.基本上有一个ASP.net网站使用Framework 4.0在IIS7上进行表单身份验证.

授权的东西似乎对每个场景都有效,除了没有指定文件(应该解析为默认文档).

例如(请不要在网站上苛刻它仍然被开发;)), http://www.rewardroster.com/Default.aspx完美地工作,这个页面应该允许匿名访问web.config中指定的.

但如果我直接点击www.rewardroster.com它会重定向到登录页面,返回URL设置为"/"或Login.aspx?ReturnUrl =%2f

我试过的一些事情:

1)将身份验证设置为无,然后默认文档工作,这不是问题.

2)为Web.config添加了DefaultDocument属性

3)删除了IIS中默认文档列表中除Default.aspx之外的所有条目

4)在Config中添加了MachineKey条目

5)在IIS中从集成管道切换到经典管道

这是我的配置中的内容:

  <authentication mode="Forms">
    <forms name="appNameAuth" loginUrl="Login.aspx" protection="All" timeout="60" slidingExpiration="true" defaultUrl="Default.aspx" path="/">
    </forms>
  </authentication>
  </authentication>

 <location path="Default.aspx">
Run Code Online (Sandbox Code Playgroud)

非常感谢你的时间,希望有人知道这里发生了什么.

小智 39

这是我的解决方案:

Global.asax,方法:Application_BeginRequest,放置以下内容:

if (Request.AppRelativeCurrentExecutionFilePath == "~/")  
   HttpContext.Current.RewritePath("HomePage.aspx");
Run Code Online (Sandbox Code Playgroud)

简单,如果您的网站使用基于配置变量的多个主页,您有机会围绕要使用的主页构建逻辑.

Dmitry.Alk

  • 好的答案.但是把它变成"〜/ HomePage.aspx".如果您的应用程序位于子文件夹("http:// server/myapp /")中,则对"http:// server/myapp"(不带斜杠)的请求将导致此代码崩溃. (4认同)
  • 这就像一个魅力!非常感谢德米特里! (2认同)

小智 8

当我试图触及根路径时,我看到同样的问题,我尝试了前面提到的所有内容.似乎Asp.net 4.0为IIS 7的applicationhost.config添加了两个ExtensionlessUrl模块.您可以通过在web.config中添加以下内容来删除这些模块.

<system.webServer>
  <handlers>
    <remove name="ExtensionlessUrl-Integrated-4.0"/>
    <remove name=" ExtensionlessUrl-ISAPI-4.0_32bit "/>
  </handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

附加信息

Microsoft KB

asp net v4如何处理无扩展的URL


小智 5

我有类似的问题。当我未登录时没有样式,www.site.nl\ 重定向到登录页面(带有指向主页的重定向网址)并输入 www.site.nl\Home(与提到的重定向网址相同的主页)之前)不需要登录。

解决方案是:

  • 打开IIS
  • 打开 IIS:身份验证
  • 打开并编辑匿名访问
  • 检查用户(我将用户更改为app.pool用户)
  • 授予用户对站点根目录(文件系统上)的权限

这对我来说很有效。

祝你好运