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

时间:2014-08-21 15:44:50

标签: asp.net-mvc iis-7.5 windows-server-2008-r2 windows-server-2003

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

通常情况如下:

  1. 用户登录到单独的应用程序,获取用户ID和令牌,单击此应用程序的链接。用户ID和令牌将进入URL。
  2. 用户使用Anonymous auth进入我的应用程序,然后在我们的LogonAuthorize过滤器中,我们从查询字符串中获取ID和令牌以验证用户。
  3. 我已登录过滤器,我可以看到用户经过身份验证。所以,他们至少要做到这一点。但是,不是他们应该看到的页面,而是来自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.我不确定为什么会导致问题,但可能会这样?

    另一个细节:有问题的应用程序作为应用程序在" main"下面的虚拟目录中运行。应用程序,配置为根网站。

    一个新细节:此服务器是Windows Server 2008 R2,并且是从Windows Server 2003升级的。我相信升级过程中的某些内容可能会解决这个问题,因为通常没有人怀疑"这类问题的解决方案有所帮助。

3 个答案:

答案 0 :(得分:1)

所以你找到了解决方案,但要求澄清它为何起作用。这可能是其中一种情况。

似乎您的网站/网络应用程序是通过已过期的特定用户凭据托管的。下次当你删除&通过新凭据或应用程序通过它来添加Windows身份验证。

我在使用特定用户Path Credentials托管的测试Web应用程序中遇到类似情况。每次用户密码更改/过期。 Web应用程序停止工作。

enter image description here

答案 1 :(得分:0)

这里的解决方案似乎是打开Windows身份验证并关闭所有其他形式的身份验证,这是违反直觉的。但是你去......这就是它的工作原理。

如果有人想发一个答案解释为什么这是我的答案,我会给他们奖励。

答案 2 :(得分:0)

Windows首先使用Kerberos进行身份验证。接下来,它尝试其他身份验证方法。您的要求是NTLM。关闭所有功能,但Windows身份验证将强制应用程序尝试成功的NTLM。