我的样式表为什么会重定向我到登录?

26

我确信这与IIS有关,但我无法弄清楚。

我有一个使用表单身份验证的网站。当我的网站尝试访问任何文件资源(javascript文件、css等)时,我会被重定向到web.config中设置的表单登录页面。如果我只是在地址栏中键入地址,也会被重定向。

forms auth 的web.config条目非常基本:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>

还有两个位置节点可以拒绝其他部分网站的用户:

<location path="n2">
  <system.web>
    <authorization>
      <allow roles="Editors" />
    </authorization>
  </system.web>
</location>
<location path="web.config">
  <system.web>
    <authorization>
      <deny users="*" />
    </authorization>
  </system.web>
</location>

我正在使用Windows Server 2008 R2上的标准IIS7安装。

编辑 因此,如果我添加一个随机的认证cookie (FormsAuthentication.SetAuthCookie()),资源就变得可用了,我知道一定是我的身份验证模型出了问题。在另一台服务器上它是工作的 (我只是把它复制过来了)。有什么办法可以跟踪问题吗?


你解决了吗?我也遇到了完全相同的问题。 - starskythehutch
7个回答

65

我曾经遇到同样的错误,在我的情况下,诀窍是将IIS中的匿名身份验证设置为使用应用程序池标识而不是IUSR

  1. 打开IIS
  2. 展开网站
  3. 选择[YourWebSite]
  4. 双击身份验证(将在IIS“区域”或安全性“类别”下)
  5. 选择匿名身份验证
  6. 单击操作窗格中的“编辑”
  7. 单击 '应用程序池标识' 单选按钮

5
对于那些想知道如何操作的人:Internet Information Services (IIS) 管理器 -> 站点 -> 默认网站 -> [你的网站名称] -> 身份验证 -> 匿名身份验证 -> 编辑 -> 匿名用户身份:应用程序池身份。 - Julian
1
在Server 2012的IIS 8.5中,进入Sites > [yoursite Home] > (在IIS组中) Authentication > Anonymous Authentication - Edit > app pool identity (https://www.dropbox.com/s/8ytk3zwkyqsmm0c/iis8_anon_creds.png?dl=0)。 - jaybro

1

我在我的Content文件夹中使用allow *。这将防止任何静态内容的授权。

  <location path="Content">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

瑞克


如果你愿意的话,可以将你的项目压缩并发送给我。我的邮箱是rrb@matrix6.com。或者更好的方法是,创建一个只包含必要内容的小型测试项目,以便更容易地出现问题。 - rboarman

1

在ASP.NET MVC应用程序中,不要使用<location>标签来处理授权,因为位置已经没有任何意义。在web.config中,你只需要使用authentication标签即可。在MVC中,可以通过使用[Authorize]属性来装饰适当的控制器和/或操作来实现授权。


我在我的MVC项目中的一个目录中有一个WebForms应用程序。显然,这些位置是有意义的,因为如果没有N2的条目,用户将无法重定向到登录页面。 - scottm
1
我不同意,位置标签在MVC应用程序中确实有用处。我不得不使用它们来允许对两个静态资源文件夹的匿名访问。 - Kev
我也不同意。我用它们来管理我的内容文件夹和登录/注册页面。 - rboarman

1
在IIS中,我的匿名身份验证已正确启用,用户设置为IUSR。因此,我需要进入Windows资源管理器,导航到我的Web应用程序目录,右键单击属性,安全选项卡,编辑按钮,并授予IUSR读取、列出和读取并执行权限(默认设置)。确保更改将被所有子项继承,应用更改,可能需要等待一段时间,然后就可以了。

0

我遇到了完全相同的问题,后来发现是因为我忘记在IIS中允许匿名访问网站!这意味着即使对于未受保护的静态资源,FormsAuthentication也总是会启动。


0

我已经很久没有做过任何asp.net表单工作了,但是首先要问的问题是-您确定您的用户是“编辑”角色的成员吗?您可以使用Web站点管理工具来设置这个,我想是吧? http://msdn.microsoft.com/en-us/library/ssa0wsyf.aspx


我甚至没有尝试浏览需要编辑角色的路径,但我确定我在其中。 - scottm

0

这是因为您已将拒绝权限设置为所有人。在IIS 7中,由于集成管道,即使您尝试浏览CSS或任何静态页面,也会被重定向。

如果您愿意,可以将静态内容放入文件夹中并允许访问。


我只是说每个人都被拒绝访问web.config文件,即使我删除那最后两个位置节点,情况仍然如此。 - scottm
哦...抱歉忘记了web.config的部分。你能试着添加额外的允许匿名用户吗?<allow users="?" /> - Rahul Soni
您也可以尝试使用一个简单的新应用程序,看看是否能够浏览静态文件。如果偶然情况下,这也不起作用...我建议检查您的计算机名称中是否包含下划线字符。 - Rahul Soni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接