我有一个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'
由于某种原因,这解决了我的问题。
您是否检查授权规则下的设置? 如果任何人都可以访问此页面(这似乎是您的目标),请确保您拥有“允许”规则,该规则具有“用户”列下的“所有用户”。
然后在“身份validation”中确保没有冲突,只有匿名身份validation启用。
希望有所帮助。