【发布时间】:2014-08-21 15:44:50
【问题描述】:
我有一个正常工作的 MVC 应用程序,但在特定服务器上,它返回 401.0“经过身份验证的用户无权访问处理请求所需的资源”错误。
通常它是这样工作的:
- 用户登录到一个单独的应用程序,获取一个用户 ID 和令牌,单击一个链接进入这个应用程序。用户 ID 和令牌进入 URL。
- 用户使用匿名身份验证进入我的应用程序,然后在我们的 LogonAuthorize 过滤器中,我们从查询字符串中获取 ID 和令牌以对用户进行身份验证。
我已登录过滤器,并且可以看到用户已通过身份验证。所以,他们至少做到了这一点。但是,他们应该看到的页面不是来自 IIS 的 401.0 Unauthorized 错误。
我尝试过的事情:
- 授予 IUSR 对目录的访问权限
- 运行 mirate.exe(它是一个实体框架应用程序)
- 正在删除解决方案中的所有 [Authorize] 属性... 我知道我们将其设为 BaseController 对象的 Initialize() 事件。我们似乎没有把它做成具体的控制器动作,比如 Home/Index,它继承了 BaseController。在 BaseController.Initialize() 之后我没有看到任何日志记录。
- 授予网络服务访问目录的权限
- 将应用程序池从集成切换到经典(我得到一个空白屏幕而不是 401.0 错误,这很奇怪。日志中的身份验证内容相同。)
- 在应用程序池中使用本地用户帐户而不是网络服务,授予该帐户访问目录的权限
- 设置“匿名”使用的不同帐户
- 重建和重新部署应用程序(多次)
- 不同的身份验证方案:打开 Windows 身份验证会得到 401.1,关闭所有身份验证会得到 401.2
- 确保 Global.asax 位于正确的位置
- aspnet_regiis -i
- 把我所有的头发都扯掉(适得其反)
我为这个错误设置了一个跟踪规则,我有一个跟踪,但我不知道如何阅读它。我会把它贴在这里,但它是一个相当长的 XML 文件。
错误来自模块ManagedPipelineHandler,通知ExecuteRequestHandler,处理程序System.Web.Mvc.MvcHandler,错误代码0x00000000。
一个细节:此服务器配置为使用端口 90 而不是端口 80。我不知道为什么会导致问题,但也许会?
另一个细节:有问题的应用程序作为应用程序在“主”应用程序下的虚拟目录中运行,该应用程序被配置为根网站。
一个新的细节:这台服务器是 Windows Server 2008 R2,是从 Windows Server 2003 升级而来的。我相信升级过程中的某些东西可能会导致该问题,因为此类问题的“通常可疑”解决方案都没有有帮助。
【问题讨论】:
-
应用中是否有cookie共享或单点登录?
-
您如何检查可访问性?我的意思是您是否检查过来自同一台机器或不同机器的托管应用程序?两台服务器上是否安装了相同版本的 MVC 和 .net????
-
查看我发布的答案
标签: asp.net-mvc iis-7.5 windows-server-2008-r2 windows-server-2003