401 - 未授权于 Server 2008 R2 IIS 7.5

401 - 未授权于 Server 2008 R2 IIS 7.5

我有一个部署到 Server 2008 IIS 7.5 框的 Web 应用程序。

从远程出现此错误:401 - Unauthorized: Access is denied due to invalid credentials。(远程 = 同一局域网上的桌面)

已经尝试使用不同浏览器的多个远程客户端,结果都相同。(IE、FF 和 Chrome)

服务器本身的桌面运行正常。但是我还没有在服务器桌面上尝试过 Firebug。我猜它仍然发出 401 状态代码,但无论如何都会返回内容。请参阅更新 #2。

该应用程序正在使用匿名身份验证。

该应用程序使用 MVC 框架在 .NET 4.0 Asp.Net 中编写。

静态内容工作正常,例如:http://server.com/content/image.jpg

Sysinternalsprocmon对每个请求返回以下 2 个结果:FAST IO DISALLOWED 和 PATH NOT FOUND。

我在同一台服务器上有另外 2 个 MVC 应用程序运行良好。我已检查文件夹的安全性,它们全部匹配。

应用程序在 Server 2008 IIS 7.0 上运行良好。

服务器上的事件日志中没有显示与此相关的任何内容。

这让我很为难,有什么解决方法吗?

更新 #1:我越深入研究,就越觉得这太不可思议了。

如果我点击 IIS 管理器中的应用程序 -> 错误页面 -> 编辑功能设置选择Detailed Errors,应用程序将远程运行。如果不保留此功能,那么问题尚未解决,只会更加令人困惑。

更新 #2:使用 Firebug,我看到状态仍然是401 Unauthorized,但响应返回了应用程序的正确 HTML。

更新 #3尝试失败请求跟踪,以下是导致 401 的警告请求跟踪:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

更新 #4常规 IIS 日志显示以下内容:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414

答案1

有时你必须退后一步......造成这种情况的原因是,Html.RenderAction()在我看来,它调用了一个[Authorize]标有属性的操作方法。

答案2

由于它在本地工作,但在远程不工作,所以在我看来,匿名用户帐户无权访问某些内容,但您的 Windows 用户可以访问。为了证明这一点,请关闭网站的 Windows 身份验证,看看它是否在本地中断。

无论发生什么问题,都可能是以您的网站身份而不是您的应用程序池身份运行的,否则它会在本地和远程发生故障。如果您有 1 对 1 的网站到应用程序池映射,或者您有一个高度受信任的环境,我的建议是将匿名用户帐户设置为使用应用程序池身份。这样您就不必担心维护第二个用户了。

您提到了进程资源管理器。它很适合查找运行信息,但可能发现拒绝访问错误的工具是 processmon(也来自 sysinternals)。尝试一下,重现并捕获,然后搜索单词“denied”。它应该会显示磁盘上的任何拒绝访问问题。

答案3

AuthorizeAttribute当您有一个继承自的自定义授权过滤器并调用一个或多个方法时,您将有同样的行为OnAuthorization,其中一个设置 AuthorizationContext.Result为“HttpUnauthorizedResult”

答案4

您是否检查过授权规则下的设置?如果任何人都可以访问此页面(这似乎是您的目标),请确保您有一个“允许”规则,该规则在用户列下包含“所有用户”。

然后在“身份验证”中确保没有冲突并且只启用了匿名身份验证。

希望有所帮助。

相关内容