asp.net - 使用 LogonUser 后出现 UnauthorizedAccessException

标签 asp.net .net asp.net-mvc windows authorization

我正在重写 Application_AuthenticateRequest 以将 Windows 身份验证用户替换为我通过调用 LogonUser 以编程方式检索的另一个用户。当我 将生成的 WindowsPrinciple 分配给 Context.User 时,我得到以下异常。我的开发机器上没有这个异常(一切正常),只有在我的 QA 机器上。两台机器都是 Windows Server 2008 R2。 QA 机器上有些不同,但我不知道它是什么。

这里是 full description我正在努力完成的事情。

    [UnauthorizedAccessException: Attempted to perform an unauthorized operation.]
   System.Security.Principal.WindowsIdentity.get_AuthenticationType() +317
   System.Web.Hosting.IIS7WorkerRequest.SetPrincipal(IPrincipal user, IntPtr pManagedPrincipal) +106
   System.Web.HttpContext.SetPrincipalNoDemand(IPrincipal principal, Boolean needToSetNativePrincipal) +9022044
   System.Web.HttpContext.SetPrincipalNoDemand(IPrincipal principal) +6
   System.Web.HttpContext.set_User(IPrincipal value) +36
   MyProj.MvcApplication.OverrideLoginUser() in C:\Data\Project\MyProj\Global.asax.cs:317
   MyProj.MvcApplication.Application_AuthenticateRequest(Object sender, EventArgs e) in C:\Data\Project\MyProj\Global.asax.cs:305
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

更新

我通过将应用程序池的标识从“ApplicationPoolIdentity”更改为“LocalSystem”解决了 QA 机器上的错误。在我的开发框中,设置是 ApplicationPoolIdentity,那么为什么权限不同?失败的功能需要什么权限?

更新 2

我已经用尽了所有选择。即使使用本地管理员组中的用户帐户也无济于事。唯一可行的是将应用程序池作为 LocalSystem 运行。其他一些人也有这个问题(documented here)任何想法都值得赞赏。谢谢。

最佳答案

好的。我只花了 5 个小时,但我找到了解决方案。在将主体对象分配给 Context.User 之前,我通过调用新创建的身份的属性将问题缩小到 Identity.AuthenticationType 调用。这次我的 Dev box 也出现了未经授权的错误。我想这意味着由于某种原因,在 Context.User 分配期间,该属性没有在我的开发盒上执行,而是在我的 QA 盒上执行。无论如何,在谷歌搜索了一下后,我找到了 this documentation它展示了如何在 WindowsIdentity 构造期间指定 AuthenticationType。在我这样做之后,我的问题就解决了!代码如下:

// Construct a WindowsIdentity object using the input account token 
// and the specified authentication type.
var foo = new WindowsIdentity(logonToken, "WindowsAuthentication");

就是这样!我的两台服务器上不再出现身份验证错误!

关于asp.net - 使用 LogonUser 后出现 UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11587305/

相关文章:

c# - 无法访问批量插入 c# 上的目标表

c# - .NET 的强大 DateTime 解析器库

.net - HTTP 服务器无效请求/连接限制

asp.net-mvc - 托管 mvc 5 网站时出现安全异常

c# - DBSet 不包含 Where 的定义

asp.net - asp.net:与内部控件相比,控件/页面的页面生命周期顺序如何?

asp.net - 在 asp.net mvc 应用程序中处理未处理异常的一些策略是什么?

.net - 使用类型和格式字符串将字符串转换为对象

c# - 使用 Azure 部署选项时出现依赖关系错误 (System.Net.Http) - 在 Visual Studio 中发布时有效

asp.net-mvc - ASP.NET MVC3 IIS无法加载样式表