401-未经授权,在Server 2008 R2 IIS 7.5上


20

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

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

使用不同的浏览器尝试了多个远程客户端,所有结果相同。(即IE,FF和Chrome)

服务器本身桌面上打应用程序是完美的。但是,我还没有在服务器桌面上尝试过Firebug。我认为它仍在发出401状态代码,但仍返回内容。请参阅更新#2。

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

该应用程序是使用MVC框架以.NET 4.0 Asp.Net编写的。

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

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

我还有2个其他MVC应用在同一台服务器上运行良好。我已经检查了文件夹的安全性,它们都匹配。

应用程序可以在Server 2008 IIS 7.0上正常运行。

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

在这里拔头发,有任何故障排除提示吗?

更新#1:这只是我挖更多的WTF。

如果我在IIS管理器中的“应用程序”上单击->“错误页面”->“编辑功能设置”,请选择Detailed Errors,该应用程序可以远程工作。不用管它了,所以问题还没有解决,只是更加令人困惑。

更新2:使用Firebug,我看到Status仍然是401 Unauthorized,但是Response正在返回应用程序的正确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

您是否尝试在服务器上运行失败的请求跟踪并从远程计算机访问应用程序。如果出现故障,则应查看原因。
Vivek Kumbhar,2010年

@vivek看到我的最新更新
mxmissile

ARRG !!!但是又被这个!浪费了2个小时的搜索时间Html.RenderAction,然后才意识到Razor的使用,Html.Action所以我最初的搜索空了。
mxmissile

哦,已经有两年了,你猜怎么着?今天早上在这个再次浪费了3个小时!我什么时候学?!?!?!
mxmissile 2013年

Answers:


19

有时您必须退后一步...原因是我认为Html.RenderAction()我调用了一个用该[Authorize]属性标记的操作方法。


1
这是我的问题,打一个熊猫实在令人沮丧(不是我愿意的)。谢谢mxmissile。
2011年

4

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

任何破坏行为都可能以您的网站身份而不是您的应用程序池身份运行,否则它将在本地和远程破坏。如果站点到应用程序池的映射比例为1到1,或者您具有高度信任的环境,我的建议是设置匿名用户帐户以使用应用程序池标识。然后,您无需担心要维护第二个用户。

您提到了流程浏览器。这对于查找运行信息很有用,但是可能会发现访问被拒绝错误的工具是processmon(也来自sysinternals)。尝试一下,复制并捕获,然后搜索“拒绝”一词。它应该打开磁盘上所有拒绝访问的问题。


4

当您有一个继承自的自定义授权过滤器AuthorizeAttribute并且对OnAuthorizationmethod进行一个或多个调用时,其中之一设置AuthorizationContext.Result为`HttpUnauthorizedResult' , 您将具有相同的行为。


4

由于某种原因,这解决了我的问题。

  1. 单击IIS中的站点。
  2. 双击身份验证
  3. 右键单击并选择高级设置
  4. 取消选择“启用内核模式身份验证”

2

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

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

希望能有所帮助。


1
允许-所有用户-继承
mxmissile 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.