401.0 - 未经授权 - 使用IIS 7的MVC应用程序

Sup*_*NES 7 asp.net-mvc windows-server-2003 iis-7.5 windows-server-2008-r2

我有一个MVC应用程序,通常工作正常,但在特定的服务器上,它返回401.0"经过身份验证的用户无权访问处理请求所需的资源"错误.

通常它的工作原理如下:

  1. 用户登录到单独的应用程序,获取用户ID和令牌,单击指向此应用程序的链接.用户ID和令牌进入URL.
  2. 用户使用Anonymous auth进入我的应用程序,然后在我们的LogonAuthorize过滤器中,我们从查询字符串中获取ID和令牌以对用户进行身份验证.

我已登录过滤器,我可以看到用户进行了身份验证.所以,他们至少要做到这一点.但是,不是他们应该看到的页面,而是来自IIS的401.0 Unauthorized错误.

我尝试过的事情:

  • 授予IUSR访问目录的权限
  • 运行mirate.exe(它是一个实体框架应用程序)
  • 删除解决方案中的所有[Authorize]属性...我知道我们将其作为BaseController对象的Initialize()事件.我们似乎没有将其转换为继承BaseController的特定控制器操作,例如Home/Index.在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升级.我相信升级过程中的某些内容可能会解决问题,因为此类问题的"通常可疑"解决方案都没有帮助.

Pra*_*ngh 2

因此,您已经找到了解决方案,但正在寻求澄清其为何有效。这可能是其中一种情况。

您的网站/Web 应用程序似乎是通过已过期的特定用户凭据托管的。下次当您通过新凭据或应用程序删除和添加 Windows 身份验证时,它会起作用。

我在使用特定用户路径凭据托管的测试 Web 应用程序之一中面临类似的情况。每次用户密码更改/过期时。Web 应用程序停止工作。

在此输入图像描述