44

我在登录页面、css 文件和 js 文件中有一些内容。

<link rel="stylesheet" type="text/css" href="../../ext/resources/css/ext-all.css" />
<script type="text/javascript" src="../../ext/bootstrap.js"></script>

不幸的是,浏览器对这些的请求会得到 302 响应。Forms Auth 将请求视为未经授权,并将其重定向到登录页面。它没有意识到请求首先来自登录页面。

GET http://localhost:50880/ext/resources/css/ext-all.css HTTP/1.1

HTTP/1.1 302 Found
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Account/LogOn?ReturnUrl=%2fext%2fresources%2fcss%2fext-all.css">here</a>.</h2>
</body></html>

我想也许为每个人设置包含文件夹(ext)的权限可能会有所帮助。

我在其他项目中没有遇到过这个问题。

4

5 回答 5

74

我有同样的问题。这是我解决它的方法。

在 IIS7 中,单击您的网站,然后双击“身份验证”按钮。单击匿名身份验证,然后单击右侧的编辑...链接。确保选中“应用程序池标识”复选框。

我的应用程序池在“网络服务”用户(不是“ApplicationPoolIdentity”)下运行。您可以在 IIS 应用程序池的高级设置中选择标识。该用户已被授予对网站文件系统的完全访问权限。

于 2012-05-31T13:44:49.393 回答
31

您需要在配置文件中排除 css 文件和图像进行身份验证,如下所示。使用位置标记,您可以排除单个文件或目录。

<location path="<RELATIVE_PATH_OF_YOUR_RESOURCE_FILES>">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>
于 2011-06-10T09:44:02.710 回答
7

所以,这就是我所做的,完全解决了这个问题。

首先,我像其他人所说的那样对 web.config 进行了更改。

我在 IIS 中使用匿名身份验证,如本期所述,我进入 IIS > 应用程序池 > 右键单击​​我的应用程序池 > 编辑 > 更改应用程序池以使用应用程序池标识。

然后 - 我转到包含我的站点的父文件夹,进入该文件夹的权限,并添加服务器的 NETWORK SERVICE 帐户以访问该文件夹。那是为我做的。这是因为Application Pool运行在ApplicationPoolIdentity下,也就是本地机器上的NETWORK SERVICE账户。

希望这对某人有帮助!

于 2012-03-29T14:16:20.253 回答
5

我遇到的问题是我从互联网上下载了一个 jquery 插件并将其复制到我在网络服务器上的内容目录中,Windows 阻止了它下面的所有文件,因此网络服务器无法正确访问它们。在 Windows 中取消阻止文件解决了这个问题。

于 2012-07-13T05:21:16.293 回答
2

这里迟到的答案,但我想帮助阐明这个 IISsue。(看看我做了什么?)

首先,我想说大卫康利斯克的答案是肯定的,每次都修复它。但是,如果您像我一样,并且已经部署了许多使用 Forms 和 Anonymous auth 的应用程序,其中 Anonymous Auth Identity 设置为 IUSR 并且突然间我现在看到了这个问题,那么请听听我是如何重现这个问题的,希望是幸免于同样的困境。


我的标准做法是让我的 Web 应用程序的 AppPoolIdentity 作为Network Service运行。然后我只需转到虚拟目录指向的磁盘上的实际目录 ->右键单击​​ -> 属性 -> 安全选项卡 -> 编辑 -> 添加网络服务用户 -> 授予读/写权限。

然后我在我需要的目录(js、css 等)上启用匿名身份验证。应用程序池标识默认为 IUSR。

好的。现在突然在我的开发环境中,我开始在我的所有 css 和 js 上获得 302 个表单身份验证重定向!发生了什么?我将我的 Web 应用程序上的 SVN 切换到源代码控制中的不同分支。啊。它完全提升了我对每个文件的所有磁盘权限。我曾经能够修复它的唯一方法是删除整个网络应用程序,并重新结帐并重新应用网络服务读取权限(或对每个文件应用权限......是的,我已经尝试过删除并重新添加父级文件夹的权限)。

所以这一次,我决定“见鬼去吧。我将我的网络应用程序作为Local System运行。这将显示谁的老板的磁盘权限。作为一种短期解决方法,这不时对我有用。” 但很可惜,不是今天。我向你发誓,在我眼前,我正在查看具有完全相同配置的表单身份验证 Web 应用程序的两个部署,并且 302 问题仅在我的开发机器上重现。唯一的区别是我机器上最近的 SVN 开关。

一旦我登录并获得 Forms Auth Cookie,js 和 css 下载就好了。


请耐心等待,我刚刚有了一个令人震惊的发现。我部署的所有服务器都已授予 MACHINE_NAME\Users 的读取权限。而我的开发机器没有。一旦我将它添加到我的开发机器,我就可以下载我的 css。


TLDR;

故事的寓意是您可以将匿名身份验证身份保留为 IUSR,但是您必须授予所有用户对磁盘上 Web 应用程序的读取权限。

由于这是一个坏主意(出于安全原因),我将采用 David C 的答案并将匿名身份验证身份作为应用程序池身份运行作为我的新做法。

于 2016-01-27T22:51:43.170 回答