401 – 未经授权在服务器2008 R2 IIS 7.5

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

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

已经尝试过使用不同浏览器的几个远程客户端,所有结果都是一样的 (IE,FF和Chrome)

服务器桌面打到应用程序本身的工作完美无瑕 。 但是,我没有尝试在服务器桌面上的Firebug。 我会假设它仍然发出401状态代码,但仍然返回内容。 参见更新#2。

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

该应用程序是使用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 :这只是挖掘更多的跆拳道。

如果我点击应用程序在IISpipe理器 – >错误页面 – >编辑function设置selectDetailed 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 

有时你必须退后一步…原因是我的视图中有一个Html.RenderAction() ,这个Html.RenderAction()调用了一个标有[Authorize]属性的操作方法。

由于它在本地工作,但不是远程,这听起来像匿名用户帐户不能访问的东西,但你的Windows用户呢。 为了certificate这一点,closures网站的Windows身份validation,看看它是否在本地打破。

无论打破什么,都可能作为您的网站身份运行,而不是您的应用程序池身份,否则将在本地和远程中断。 如果您有1到1个网站到应用程序池的映射,或者您有一个高度信任的环境,则我的build议是将匿名用户帐户设置为使用应用程序池标识。 那么你不必担心第二个用户维护。

你提到了进程pipe理器。 这对于查找运行信息很有帮助,但是可能会发现拒绝访问错误的工具是processmon(也来自sysinternals)。 尝试一下,repro和capture,然后search单词“denied”。 它应该打开磁盘上的任何访问被拒绝的问题。

当你有一个inheritance自AuthorizeAttribute自定义授权的filter和一个或多个OnAuthorization方法的调用时,你将会有相同的行为,其中一个调用AuthorizationContext.Result为`HttpUnauthorizedResult'

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

  1. 在IIS中单击网站。
  2. 双击validation
  3. 右键单击并select高级设置
  4. 取消select“启用内核模式authentication”

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

然后在“身份validation”中确保没有冲突,只有匿名身份validation启用。

希望有所帮助。