微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用LogonUser后出现UnauthorizedAccessException

我正在重写Application_AuthenticateRequest来replaceWindows身份validation的用户与我以编程方式检索与logonUser调用的另一个用户。 当我生成的WindowsPrinciple分配给Context.User时,我得到以下exception。 我没有在我的开发机器上得到这个exception(一切正常),只在我的QA机器上。 这两台机器都是Windows Server 2008 R2。 质量保证机器上有些不同,但我不知道它是什么。

这里是我想要完成的完整描述 。

[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:DataProjectMyProjGlobal.asax.cs:317 MyProj.MvcApplication.Application_AuthenticateRequest(Object sender,EventArgs e) in C:DataProjectMyProjGlobal.asax.cs:305 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously) +75

更新

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

更新2

我用尽了所有的select。 即使在本地pipe理员组中使用用户帐户也无济于事。 唯一可行的是将应用程序池作为LocalSystem运行。 其他一些人也有这个问题( logging在这里 )任何想法,赞赏。 谢谢。

.NET PInvoke在Linux和Mac OS X平台上可用吗?

如何将Windows服务从本地PC移动到虚拟专用服务器上

我的C#Windows应用程序如何在不进行轮询的情况下收到networking状态变化的通知

硬盘卷path为完整文件path

如何恢复尚未正确释放的COM对象?

运行一个C#程序以单声道启动另一个C#程序

在.NET中,当你最小化程序时,垃圾回收器会被调用吗?

重命名和复制程序集是否安全?

将消息发送到Windows GUI线程

C#窗体不呈现控件

好。 它只花了我5个小时,但我找到了一个解决方案。 通过调用新创建的标识的属性之前,我将问题的范围缩小到Identity.AuthenticationType调用BEFORE将主体对象分配给Context.User 。 这一次,我也得到了我的Dev框未经授权的错误。 我猜这意味着由于某种原因,在Context.User分配过程中,该属性没有在我的开发框中执行,而是在我的QA框中执行。 无论如何,google搜索了一下后,我发现这个文档展示了如何在WindowsIdentity构造过程中指定AuthenticationType。 我这样做后,我的问题解决了! 代码如下:

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

而已! 我的两台服务器上都没有更多的验证错误

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐